case별 git pull
- CASE1
- ORIGIN과 local repository의 commit 이력이 같은 상황에서 local에서 working directory에서의 수정
- 이때에는 git pull origin main을 해도 변화 발생 없음(commit 이력은 동일하므로)
- 이 상황은 pull을 받는 상황이 아닌, 수정 후에 commit push 하거나 local작업사항을 취소해야 되는 상황
- CASE2
- ORIGIN이 수정 또는 추가 되었고, 내가 해당 파일을 수정하지 않은 상황
- git pull 또는 git pull origin 브랜치명을 통해 update사항 download
- fast forward 상황
- CASE3
- working directory 또는 staging까지 작업한 상태인데 같은 파일이 origin에서 commit 발생시에 git pull을 할 경우에 에러 발생
- error: Your local changes to the following files would be overwritten by merge
- fetch까진 성공하였으나 commit이력이 존재하지 않아 diff확인 및 merge할수 있는 병합파일이 생성되지 않음
- 대안
- 기존 수정본을 backup을 만들어두고, 취소 시킨 후 git pull origin main 후 다시 복사본을 참고하여 수정작업
- 이를 위해 git stash 활용가능
- CASE4
- 로컬 repo의 수정 발생. origin(원격)에 수정발생. 그러나, 같은 파일은 아닌경우
- git pull시 문제 없이 실행되고, fast forward가 아닌 merge커밋 발생
- CASE5
- ORIGIN이 수정되어 신규commit이력이 생긴상황에서, 같은 파일을 나도 수정하고 있는 상황에 git push origin main 하면 충돌 발생
- 대안
- 1)git pull origin main을 후 충돌해결
- 2)git fetch → git diff → git merge fetch_head → working directory에서 충돌해결 후 다시 add, commit, push
CASE2 - origin만 수정
실습 전 소스트리로 봤을때 같은 선상에 있음 - origin과 local이 같은 상태
origin에서 내용 수정
fetch 누르니 바뀜 - origin이 위로 올라옴
git log로 봐도 마찬가지
git pull 후 git log로 확인하면 하나로 됨 → Fast-forward
CASE4 - 다른 파일 수정
로컬에서 test1의 내용 추가
커밋 까지
origin에서 test2의 내용 추가
git push하려면 오류남 - git pull먼저 해라
git pull하고 git log 확인하면 merge한 commit 내용이 들어온 것을 확인 - 충돌 안남
⇒ 파일이 다른 것을 바꿀 때는 충돌 안난다
소스트리로 보면 원래는 하나였다가 local에서 수정/ origin에서 수정 해서 갈라지고 pull했더니 하나로 merge 된 commit에 위치한 것을 확인
뒤처진 origin 버전을 맞춰주자
push했더니 origin도 통일된 것을 확인
origin의 test1에도 반영됨
CASE3 - git pull
이번엔 같은 파일 같은라인으로 충돌시켜보기
origin에서 test3파일 생성
로컬은 같은 파일을 생성하되 커밋 안하고 바로 pull해보기
⇒ FETCH_HEAD에 main을 저장(fetch는 성공), merge는 불가능, 수정사항을 따로 복사해놓고 옮겨놔라
→ commit을 안했기 때문에 일어남
git commit 후 git log로 확인
fetch를 먼저 하고 commit 해서 origin 위에 HEAD가 올라가있는 것을 확인
변경사항 발생
log는 변경이 없음
변경해서 저장
git log로 보면 HEAD가 merge에 가있음
push로 origin에 반영
깃허브 반영 완료
CASE5 - fetch , merge
origin에서 test3 파일 내용 추가
로컬에서도 test3 내용 추가
커밋까지
git fetch - diff로 main과 origin/main 비교
main과 fetch_head랑 비교해도 같음
merge하면 수정사항 발생
충돌해결 후 저장
add, commit, push
반영 완료
⇒ pull은 fetch+merge와 같다
'Git' 카테고리의 다른 글
[Git] tag (0) | 2023.12.19 |
---|---|
[Git] stash (0) | 2023.12.18 |
[Git] diff, fetch (0) | 2023.12.13 |
[Git] 취소 상황 (0) | 2023.12.12 |
[Git] pull과 충돌 (0) | 2023.12.11 |