개발관련/Git

커밋하지 않고 git stash 충돌을 해결하는 방법

Rateye 2021. 7. 8. 10:38
728x90
반응형

 

질문 : 커밋하지 않고 git stash 충돌을 해결하는 방법은 무엇입니까?

이 질문에서 질문 했듯이 커밋에 모든 수정 사항을 추가하지 않고 git stash pop 을 해결하는 방법도 알고 싶습니다 (충돌없는 "git stash pop"처럼).

내 현재 접근 방식은 이렇게하기 때문에 매우 멋지지 않습니다.

git stash pop  # -> CONFLICT
git stash drop
# [resolve conflict]
# [add conflict files]
git reset HEAD # <all files that are in commit-mode>

재생산 방법 :

mkdir foo; cd foo; git init
echo "1" > one
echo "2" > two
git add -A; git commit -m "first"
echo "1.1" > one
echo "2.1" > two
git stash
echo "2.2" > two
git commit -a -m "second"
echo "Only this file would stay in HEAD without the conflict" > third
git add third
git stash pop
git status

2016-06-27 : 예제에 'third'라는 새 파일을 추가하여 scy의 솔루션과 같은 해결 방법이 빈 HEAD에서만 작동하지만 HEAD에 다음과 같은 동일한 내용이 없다는 초기 문제를 수정하지 않음을 보여줍니다. git stash pop 을 위해.

답변

글쎄, 당신은 그들을 따를 수 있습니다 :). 그러나 커밋을 수행 한 다음 분기를 재설정하여 해당 커밋을 제거하고 다른 답변에서 제안 된 유사한 해결 방법 이이 문제를 해결하는 깨끗한 방법이라고 생각하지 않습니다.

다음 솔루션은 나에게 훨씬 더 깔끔한 것처럼 보이며 Git 자체 에서도 제안했습니다. 충돌이있는 저장소에서 git status 를 실행 해보십시오.

Unmerged paths:
  (use "git reset HEAD <file>..." to unstage)
    (use "git add <file>..." to mark resolution)
    

따라서 쓸모없는 커밋을하지 않고 Git이 제안한대로합시다.

명령 줄로 번역 :

$ git stash pop
    
    # ...resolve conflict(s)
    
    $ git reset
    
    $ git stash drop
    

해결 된 것으로 충돌을 표시하는 방법에는 git addgit reset 두 가지가 있습니다. git reset 은 충돌을 해결 된 것으로 표시하고 색인에서 파일을 제거하는 반면 git add 는 충돌을 해결 된 것으로 표시하지만 파일을 색인에 유지합니다.

충돌이 해결 된 후 색인에 파일을 추가하는 것은 의도적입니다. 이렇게하면 충돌이 해결 된 후 이전 숨김 및 변경 사항과 변경 사항을 구별 할 수 있습니다. 마음에 들지 않으면 항상 git reset 을 사용하여 색인에서 모든 항목을 제거 할 수 있습니다.

충돌을 해결하기 위해 수동으로 수행하는 대신 KDiff3 , Meld 등과 같은 3 방향 병합 도구 를 사용하는 것이 좋습니다. 일반적으로 충돌의 전부 또는 대부분을 자동으로 해결합니다. 엄청난 시간 절약입니다!

출처 : https://stackoverflow.com/questions/7751555/how-to-resolve-git-stash-conflict-without-commit

 

728x90
반응형