본문 바로가기
일상

[Git] git pull을 안하고 commit한 경우 merge conflict 해결방법

by IT황구 2021. 7. 10.
728x90
반응형

상황

블로그에 게시할 내용 작성 후 commit을 했습니다. 그 이후 push를 하려고 하니 pull이 필요하다고 합니다.

생각해보니 집에서 Repository에 push를 이미 했는데, 노트북에서 작업시에 pull을 하지 않았습니다.

 

하나의 브랜치에서 작업한 내용인데.. 겹쳤습니다.

 

해결방법

1. git reset + stash

# 가장 최근작업을 취소한다.
$ git reset HEAD^  

# 수정된 내용들을 잠시 stack에 저장해둔다. 
$ git stash 

# pull을 통해서 최신 내용을 다시 받아온다
$ git pull origin my_repo

# stack에 담았던 수정사항을 다시 가져온다.
$ git stash pop

# Merge Conflict 해결 이후 다시 커밋한다.
$ git commit

# remote repository에 push한다.
$ git push ~~

 

  • git stash pop 시에 conflict이 생깁니다
    • 내가 변경한 내용과 새롭게 최신화 한 내용의 수정내용이 같다면 conflict은 당연히 생길 수 있습니다.
    • merge conflict와 동일하게 해결하면 됩니다.
  • 잘못 merge된 내용은 reset으로 취소하면 됩니다.
    • 옵션은 --soft, --mixed, --hard가 있습니다. 아무 옵션도 주지 않을경우 --mixed 입니다.

 

commit을 취소하고, 해당 내용을 잠시 다른곳에 저장 합니다.

브랜치를 최신화 하고 충돌을 해결 후 다시 commit하는 방법입니다.

 

그런데 reset keyword가 주는 부담감이 있습니다. reset을 잘못 하더라도 reflog를 통해서 commit 번호를 찾아 reset 하기 전으로 되돌릴 수 있으므로 부담 없이 하셔도 됩니다.

 

마무리

근본적인 원인은 미리 pull을 하지 않아 발생한 문제입니다.

 

앞으로는 pull을 한 후에 해결하는것이 좋을것 같습니다.

 

 

Reference

https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0

 

Git - Reset 명확히 알고 가기

지금까지 reset 명령을 실행하는 기본 형태와 사용 방법을 살펴봤다. reset 명령을 실행할 때 경로를 지정하면 1단계를 건너뛰고 정해진 경로의 파일에만 나머지 reset 단계를 적용한다. 이는 당연한

git-scm.com

 

728x90
반응형