카테고리 없음

merge 관련, merge 취소(checkout)

zuyo 2017. 7. 20. 20:42
반응형
merge

브랜치 병합
git merge [브랜치 이름]

원격 브랜치 병합 (fetch 후)
ex)
git fetch origin master  -> FETCH_HEAD 브랜치 생성됨
git merge FETCH_HEAD

충돌 해결 (mergetool 사용)
git mergetool

공백 무시
git merge -Xignore-space-change [브랜치 이름]
-Xignore-space-change: 뭉쳐있는 공백을 하나로 취급
-Xignore-all-space: 모든 공백 무시


merge 의 3가지 상황


1. Fast-Forward
A   -   A+B
수정 후 코드가 전의 코드를 모두 포함하여 그냥 병합하면 되는 경우

2. 3-way Merge
A   -   A+B
      -   A+C
서로 다른 갈래로 나뉘어진 경우 (그러나 서로 충돌하는 영역은 없는 경우)

3. Conflict (충돌)
A   -   B
      -   C
서로 다른 갈래로 나뉘어졌으며 수정한 영역이 겹쳐 충돌이 일어나는 경우 


mergetool, difftool


두 코드를 비교하여 차이점, 달라진 부분을 확인시켜주는 프로그램.



병합(merge) 취소

git merge --abort

안 먹히는 경우

merge 전에 커밋하지 않은 파일이 존재하고 있는 경우

혹은 merge 전에 stash 하지 않은 경우


git reset --hard HEAD~
왠만하면 쓰지 않는다. 특히 협업시 히스토리가 덮어씌워져서 위험

덮어 씌워 충돌 해결하기
--ours 옵션을 선택하면 merge 의 기준이 되는 현재 파일로 충돌을 처리하고
--theirs 옵션을 사용하면 merge 해오는 파일을 선택하게 됩니다.
이렇게 파일들을 checkout해서 충돌을 해결한 다음 커밋을 해서 merge하면 됩니다.

현재 워킹디렉토리 파일 내용으로 최종 갱신 (덮어 씌우기)
git checkout --ours [파일명] / git merge -Xours [브랜치 이름]


merge 하는 브랜치에 있는 파일 내용으로 최종 갱신 (덮어 쓰기)

git checkout --theirs [파일명] / git merge -Xtheirs [브랜치 이름]


※ checkout 명령
파일을 완전하게 대상 커밋의 시점으로 돌림
reset 명령의 hard 모드를 실행한 것처럼 인덱스와 작업 전부를 되돌림



revert

전 상태로 돌아간다는건 병합 취소와 같은데
이전 커밋으로 돌아가는게 아니라 새로운 커밋을 생성.
즉 reset hard랑 다르게 병합 취소를 되돌릴 수 있는 여지가 있음.

ex) git revert -m 1 HEAD

사용법
1) git log 명령 실행을 통해 SHA-1 체크섬 값 앞 4자리 외움
2) git revert [1에서 얻은 4자리 숫자]


반응형