Git의 저자는 이것이 좋은 안전 장치라고 생각하기 때문에 힘내네가 당신이 갈등을 해결했다는 것을 깨닫지 못합니다.
이것은 당신이 git rebase
이, 여부를 효율적으로 또는 실제로 정확히 같은 입니다 반복 체리 따기 - 변화의 단지 많은 것을 체리 따기가 기억 확약 할 때 발생하지만 매우 유사 으로 리베이스중인 커밋에 이미 변경이 있습니다. 예를 들어
, 원작이 이렇게되면 가정 :
...--o--* <-- origin/develop
\
A--B--C <-- develop
여기 A
, B
및 C
당신이 만든 세 커밋합니다. *
은 처음 시작했을 때 develop
인 곳이며 origin/develop
은 여전히 기억합니다.
커밋 A
에서 파일 a
에있는 내용을 수정하고 README.txt
파일을 업데이트합니다. B
에서 파일 b
에있는 내용을 수정했지만 README.txt
을 잊어 버리십시오. 커밋에서 C
을 업데이트하면 README.txt
을 업데이트해야합니다.
이제 다른 사람이 만든 변경하고 업스트림 서버에 밀어 때문에 git fetch
자신의 일 :
...--o--*--D--E <-- origin/develop
\
A--B--C <-- develop
하고 새로운 origin/develop
에 git rebase
당신의 develop
로 이동합니다.
...--o--*--D--E <-- origin/develop
\ \
\ A'-B'-C' <-- develop
\
A--B--C [abandoned]
이 새로운 A'-B'-C'
커밋은 단순히 : 일반 이러한 의지는 모두가 잘된다면, 당신은 끝낼 것이다, 그래서A
, B
, 새로운 커밋 A'
, B'
-C
및 C'
복사 git cherry-pick
원본 복사본.
힘내는 A
가 정확히 동일하게 변경 D
또는 E
중 하나에서 또한을 소개 커밋하면 충분히 똑똑하다, 힘내 것이다 단순히 드롭A
때 복사 : 그것을 건너 뛰고 복사합니다 단지 B
및 C
. 그러나이 의미에서 A
이 "D
과 같습니다."또는 두 번째 대소 문자가 참인 경우 - A
이 완전히 분리되어 잘 복사되는 경우를 가정 해 봅니다.그러나 B
도 아니고C
도 "같음"E
이 아니라 "E
"이라는 합이 B+C
인 것입니다. 즉, 여러분과 그들은 을 동일한 수정으로 만들었지 만 그들은 을 하나의 커밋으로 수정하는 것을 기억하고 ... b
파일의 변경 사항에 약간의 철자 차이가 있습니다 - 또는 아마도 b
파일이 재구성되었거나 뭔가가 있었기 때문에 Git 귀하의 변경 사항을 그대로 적용하는 것.
너는 손으로 들어가서 힘내는 약 b
에 대해 불평하고있다. 힘내는 사람이 B
을 선택하여 B'
이되도록 체리를 고르려고하는 동안 불평을한다. 그런 다음 git add
해결 된 파일입니다. 하지만 이제 파일 b
은 정확히 업스트림 b
과 일치합니다. 이것은 의도적으로 이루어 지지만, 결국 b
파일을 제출할 수 없습니다. Git은 귀하가 그 사실을 확인했는지 알 수 없습니다. 힘내 줄 아마도 git checkout HEAD -- b
그들의 버전이 무엇인지 보았다고 생각합니다. 이 경우 b
을 추출하고 모든 문제가 해결 된 것으로 가정하고 동일한 상황에서 다른 방법으로 남겨 둡니다. 1
그래서,이 이후 완전히 B
를 저지하락 것입니다, 힘내 당신에게이 경고를 제공합니다. 올바른 것 이 인 경우 지금 B
의 커밋을 삭제하면 결국 git rebase --skip
을 실행하고 B
은 건너 뜁니다.
이제 C
을 적용하여 README.txt
을 수정하려고합니다. 그들은 이미 그들의 커밋에서 그것을했기 때문에 이것은해야 할 일이 전혀 없습니다. D
. 여러분의 힘내네가 다시 한번, 자동적으로, 심지어 이번에는 해결 된 후, 충돌을 볼 것입니다. 망할 놈이 잘못했을 지 궁금해하고 git rebase --skip
을 실행하여 이것이 맞는지 확인하십시오.
작업이 완료되면 , 그것은 단지 A
복사 할 필요가 있다고 밝혀, 당신은 실제로으로 끝날 :
...--o--*--D--E <-- origin/develop
\ \
\ A' <-- develop
\
A--B--C [abandoned]
하지만 힘내되고 싶어 정말 확실 그에서 B
및 C
을 생략 꽤 문자 적으로는 비교적 쉽기 때문에 복사가 정확합니다. 은 git rebase --continue
을 실행할 때에서 git add
까지를 잊어 버렸습니다. 좋은 내장 git cherry-pick
명령하지 당신은 매우 초기에, 실현 경우
1이 더 의미가 있고, 힘내 않았다. 대신, 리베이스가 커밋을 패치로 바꾸고 누군가가 여러분에게 메일을 보낸 것처럼 패치를 적용하려고했습니다. 힘내라 그러면 패치를 전혀 적용하지 않았다는 것을 알 수 없다.