-
git 사용하기 (2)Practical_skills/git 2019. 7. 13. 23:03
지난 포스트에 이어서 branch들을 병합할때 사용하는 rebase와 cherry-pick 을 문제를 통해서 알아보자.
Problem 2. dependencies (local/remote rebase) and cherry-pickby Daejin
- create two branches ‘a’ and ‘b’
- switch to branch ‘b’ and create a file b.txt and add any text in it. git add and commit it.
- switch back to branch ‘a’ and create a file a.txt.
- Q1) There are two ways (except git merge) to apply changes in branch ‘b’ to branch ‘a’. Try those two ways. What is the difference and when to apply each?
- cherry-pick
- rebase
- Q2) If branch ‘b’ is removed after all commits in branch ‘b’ are pushed but not merged in remote branch, how to apply changes in branch ‘b’ to branch ‘a’?
- Q3) update the local master branch to the latest
- Q4) what is push command if you want to upload some changes in local branch to remote branch named ‘a’ if such a branch exists?
- Q1) There are two ways (except git merge) to apply changes in branch ‘b’ to branch ‘a’. Try those two ways. What is the difference and when to apply each?
풀이
-
Q1
-
cherry-pick
$ git cherry-pick b
를 하면 아래와 같은 error가 발생한다.주의해야할 것은 commit 명령이 아닌 add와 cherry-pick --continue 명령으로 work tree에 있는 파일을 staged 상태로 만들어 준다.
-
rebase
rebase도 마찬가지로
$ git rebase b
를 하면 error가 발생한다.
그래서
$ git add ${file}
$ git rebase --continue
를 하면 아래와 같은 결과가 나온다.b branch에 있던 b.text file이 a branch에도 나타나는 것을 확인할 수 있다.
하지만 cherry-pick 과 rebase의 차이는 이력 결과 graph를 보면 알 수 있다.
-
-
Q2
b branch내의 b.text파일을 수정하고 branch가 지워졌을 때 이것을 어떻게 a branch에 적용할 수 있는지 설명하겠다.
최종적으로 b.text파일에 b bbb 가 씌여있는 것 을 확인할 수 있다.
-
Q3
branch들을 cherry-pick과 rebase를 사용해서 병합하고 나면 master branch가 이력상으로 뒤쪽에 위치하는 것을 graph를 통해 확인 할 수 있다. master branch에서 병합된 branch를 merge 하면 최신상태를 반영할 수 있다.
$ git checkout master
$ git merge ${branch_name} -
Q4
아래의 명령을 통해 remote repository 상의 master branch가 아닌 다른 branch에 push 할 수 있다.
$ git push origin ${local_branch}:${remote_branch}
master branch가 아닌 다른 branch를 pull하고 싶다면
$ git pull origin ${remote_branch}:${local_branch}
좀더 알고 싶다면 아래의 링크를 보자
remote branch의 모든것
Problem 3. Merge conflictby
-
switch to master branch and create a file c.txt
-
fill any content in c.txt and commit.
-
create two new branches ‘c’ and ‘d’
-
switch to branch ‘c’ and modify content in c.txt. Also commit it.
-
switch to branch ‘d’ and modify content in c.txt and commit it.
-
Try apply changes in branch ‘c’ to branch ‘d’ and check if the following error occurs
-
CONFLICT (content): Merge conflict in c.txterror: Failed to merge in the changes.
or
error: could not apply ...... hint: after resolving the conflicts, mark the corrected paths-
Q1) How to resolve this issue and what is the difference
- cherry-pick
- rebase
-
풀이
-
Q1 초기설정대로 진행을 하면 아래와 같은 상태가 된다.
-
cherry-pick
$ git cherry-pick ${branch}
명령을 하면 아래와 같은 오류가 발생한다.충돌파일을 찾아서 내용을 수정 해주고
add 와 cherry-pick --continue 명령을 통해 수정해준 파일을 staged상태로 만든 후 branch를 merge 한다.
주의사항은 commit 명령을 안한다는 것이다.
최종적으로 merge된 log는 아래와 같다.이후 mater branch 최신상태로 반영하려면 아래와 같다.
-
rebase
$ git rebase ${branch}
명령을 하면 아래와 같은 오류가 발생한다충돌이 발생한 파일을 충돌이 발생하지 않도록 수정한다.
이후
$ git add ${file}
$ git rebase --continue를 해주면 두 branch가 merge 된다.
최신사항을 master branch에 반영한 결과 아래와 같다.
-
'Practical_skills > git' 카테고리의 다른 글
git 사용하기(3) (0) 2019.07.16 git log visualizer (0) 2019.07.13 git 사용하기 (1) (0) 2019.07.13