[Git] case별 git pull
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와 같다