git 병합을 작업 트리에 대한 커밋되지 않은 변경 사항을 처리하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/813822

  •  03-07-2019
  •  | 
  •  

문제

동료와 저는 현재 마스터 지점에서 일하고 있습니다. 작업 트리에 커밋하고 싶지 않은 코드가 있습니다 (디버깅 진술 등). 이제 그가 동일한 파일 중 일부를 변경하면 병합 할 수 없습니다.

$ git merge origin/master
Updating 1b8c5c6..eb44c23
error: Entry 'blah.java' not uptodate. Cannot merge.

전복 배경에서 나오면서 저장소에서 변경 사항을 가져올 때 작업 트리를 자동으로 병합하는 데 익숙해졌으며 충돌이 발생하면 수동으로 해결됩니다.

내가 git에서 이것을하는 가장 빠른 방법은 다음과 같습니다.

$ git stash
$ git merge origin/master
$ git stash pop

본질적으로, 커밋되지 않은 변경 사항을 제거하고 병합을 수행 한 다음 변경 사항을 다시 적용합니다. Merge를 어떻게 내 작업 트리와 병합하여 당기려고하는 변경 사항과 어떻게 병합 할 수 있습니까?

도움이 되었습니까?

해결책

내가 알 수있는 한, 당신이 할 수있는 최선은 이미 가지고있는 것입니다. git stash. 나도 합병이 깨끗한 나무 만 다루고 싶어한다는 것이 이상하다고 생각합니다.

다른 팁

전복에서 배운 모든 것을 잊어 버리십시오.

외부 변경을 도입하기 전에 항상 커밋하십시오.

당신이 대부분 일하는 나무를 가지고 있다고 상상해보십시오. 아마도 완벽하지는 않지만 약간의 진전을 이루고 있습니다. 그런 다음 합병과 방금 혼란을 겪고있는 코드 (버그 자체, 다루기에는 너무 많은 갈등 등)를 가져옵니다. 그냥 취소 할 수 있다면 좋지 않습니까?

당신이 커밋한다면, 당신은 할 수 있습니다. 그렇지 않다면, 당신은 단지 고통을 겪을 것입니다.

기억하십시오 : 당신이 저지르는 것은 그렇지 않습니다 가지다 당신이 밀기 위해서는 당신이 저지르는 것은 쉽게 잃을 수 있습니다.

안전하고 쉬운 일을하고 일찍 헌신하고 자주 커밋하십시오.

  • 지역 작업이 커지지 않은 경우
    • 원격 브랜치에 존재하지 않는 완전히 새로운 파일을 소개했습니다.
    • 또는 로컬 작업의 영향을받는 파일은 리모컨에서 가져와야하는 변경에 영향을받는 파일과 겹치는 0 중첩이 없습니다.
      • 당신은 운이 좋다 : git pull "그냥 작동"할 것입니다
    • 그렇지 않으면:
      • 로컬 변경 사항이 변경 사항과 겹치지 않으면 당기고 있습니다.
        • git stash가 작동합니다.
          • git stash save
          • git pull
          • git stash pop
      • 로컬 변경 사항이 변경 사항과 중첩되면
        • git stash는 수동 충돌 해결이 필요합니다.
          • git stash save
          • git pull
          • git stash pop
          • 합병 충돌을 해결하십시오
          • git reset
          • git stash drop
  • 지역 작업이 저지른 경우
    • 그리고 지역 작업의 영향을받는 파일은 영향을받는 파일과 겹치지 않습니다.
      • 당신은 운이 좋다 : git pull "그냥 작동"할 것입니다
      • 하지만: git pull --rebase 깨끗한 역사 때문에 "더 나은 일"
      • 병합 커밋은 없습니다. 업스트림 변경 후에 변경 사항이 커지게됩니다
    • 그렇지 않으면:
      • Git Pull은 수동 충돌 해결이 필요합니다.
        • git pull
        • 합병 충돌을 해결하십시오
        • git add FILE 충돌하는 각 파일에 대해
        • git commit
      • git pull --rebase 더 깨끗한 역사 때문에 여전히 "더 잘 작동"할 수 있습니다.
        • 그러나 병합 갈등을 해결하는 것이 훨씬 어려울 수 있습니다

자세한 설명은 다음을 참조하십시오. https://happygitwithr.com/pull-tricky.html

당신은 말할 수 없습니다 git merge 로컬 저장소와 관련하여 변경 사항이있는 파일의 변경 사항을 병합합니다. 이렇게하면 합병이 심하게 진행될 때의 변화를 잃지 않도록 보호합니다.

병합에 대한 CVS 및 SVN 접근 방식을 사용하면 업데이트 전에 파일을 수동으로 복사하지 않고 병합에 스크램블 된 경우 좋은 상태로 돌아 가려면 수동으로 다시 편집해야합니다.

합병을하기 전에 변경을 저지르거나 보관하는 경우 모든 것이 뒤집을 수 있습니다. 병합이 잘 진행되지 않으면 여러 가지 방법을 시도하고 가장 잘 작동하는 것과 함께 갈 수 있습니다.

실험 또는 디버그 변경을 저지르는 경우 사용할 수 있습니다. git rebase 커밋 후 그들을 이동하려면 git merge 쉽게 제거하거나 실수로 저장소에 밀어 넣는 것을 피하기 위해.

사용하십시오 git rebase 지점에서 공유 저장소로 밀면 해당 저장소에서 당기는 모든 사람에게 슬픔이 발생합니다.

나는 사용하는 것을 선호한다 git stash 이 경우, Merge가 편집하고 커밋되지 않은 파일을 변경하는 경우에만 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top