ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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?
        1. cherry-pick
        2. 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?

    풀이

    Question을 풀기전 초기상태

    • Q1

      1. cherry-pick
        $ git cherry-pick b
        를 하면 아래와 같은 error가 발생한다.

        다른 branch를 merge하기 위해서는 work tree에 있는 것들을 staged상태로 올려 주어야 한다.

        주의해야할 것은 commit 명령이 아닌 add와 cherry-pick --continue 명령으로 work tree에 있는 파일을 staged 상태로 만들어 준다.

        cherry-pick 결과
      2. rebase

        rebase도 마찬가지로
        $ git rebase b
        를 하면 error가 발생한다.
        그래서
        $ git add ${file}
        $ git rebase --continue
        를 하면 아래와 같은 결과가 나온다.

        rebase 결과

        b branch에 있던 b.text file이 a branch에도 나타나는 것을 확인할 수 있다.
        하지만 cherry-pick 과 rebase의 차이는 이력 결과 graph를 보면 알 수 있다.

        merge 이후 directory
    • Q2

      b branch내의 b.text파일을 수정하고 branch가 지워졌을 때 이것을 어떻게 a branch에 적용할 수 있는지 설명하겠다.

      q2를 위한 상태설정
      b.text 내용: b에서 bbb를 추가했다.
      b branch를 제거
      a branch 내의 b 파일: bbb가 반영되지 않음
      사라진 branch의 스냅샷 를 기억하는 id를 통해 수정내용을 불러옴
    최종적으로 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

    Daejin

    • 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

        1. cherry-pick
        2. rebase

    풀이

    • Q1 초기설정대로 진행을 하면 아래와 같은 상태가 된다.

      problem3 초기상태
      1. cherry-pick
        $ git cherry-pick ${branch}
        명령을 하면 아래와 같은 오류가 발생한다.

        충돌오류

        충돌파일을 찾아서 내용을 수정 해주고

        충돌이 발생된 파일

        add 와 cherry-pick --continue 명령을 통해 수정해준 파일을 staged상태로 만든 후 branch를 merge 한다.

        과정

        주의사항은 commit 명령을 안한다는 것이다.
        최종적으로 merge된 log는 아래와 같다.

        merge된 branch

        이후 mater branch 최신상태로 반영하려면 아래와 같다.

        master를 최신상태로
      2. rebase

        $ git rebase ${branch}
        명령을 하면 아래와 같은 오류가 발생한다

        $git rebase ${branch} 이후

        충돌이 발생한 파일을 충돌이 발생하지 않도록 수정한다.

        충돌발생한 파일

        이후
        $ git add ${file}
        $ git rebase --continue

        를 해주면 두 branch가 merge 된다.

        rebase 결과


        최신사항을 master branch에 반영한 결과 아래와 같다.

        master에 최신사항 반영

    'Practical_skills > git' 카테고리의 다른 글

    git 사용하기(3)  (0) 2019.07.16
    git log visualizer  (0) 2019.07.13
    git 사용하기 (1)  (0) 2019.07.13

    댓글

Designed by Tistory.