이 이전 분기 내가 난장판을 청소보다 훨씬 쉽게 원하는 등
git difftool oldbranch
같은 일을 수동으로 시각적 difftool로 변경을 통해 복사 만 몇 가지 변경이 있습니다 자동 병합으로 인해 발생합니다.
이 분기가 오래 만 그 방법 업데이트 된 지점에 병합 master
에 변경 내용을 리베이스하려는 당신이 대신 할 수있는 당신이 원하는 몇 가지 변화를 가지고 있기 때문에.
그러나 이전 분기에서 어떻게 든 원하지 않는 이전 변경 사항을 가져 왔다고 언급 했으므로 리베이스하는 것에 대해 좀 더 자세히 살펴 보겠습니다.
실제로 원하는 모든 변경 사항은 이전 분기의 끝에있는 원자 커밋에 있다고 가정합니다.이 분기는 지점 old
이라고합니다.
I J master
o---------o----------o
\
\
o K
\
\
o L
\
\
o old
이의 당신이 master
에 old
을 통해 커밋을 L
을 병합 할 것을 가정 해 봅시다, 어떻게 든 J
나쁜 이미 master
에서 수정되었습니다하지만 어떻게 든 사용자들은 커밋한다 : 그래서 old
의 역사는이 같은 작은 선물을 볼 것이다 당신은 또한 K
는 "나쁜"또한 당신이 master
에 추가 할하지 않는 것이 커밋 가정의하자
# With master checked out
git merge old
을 실행할 때 여전히 통합된다.
# Make a new branch off current commit of master
git branch new-branch master
# Now rebase L through old onto new-branch
git rebase --onto new-branch K old
이 망할 놈의 사이의 커밋을하는 것입니다 말해 무엇 :
그런 다음 당신이 할 수있는 일 현재 오프 새로운 지점 새로운 지점에 old
을 통해 범 L
을 리베이스 선택적으로 master
의 커밋 할 것입니다 K
과 old
과 같이 다른 샤시로 복사하고 new-branch
의 끝 부분에 복사하십시오 ((K, old]
과 유사 할 것입니다). 범위의 배타적 인 끝이기 때문에 K
을 빼십시오.
그래서 지금 가지는 다음과 같다 :
이제
I J master
o---------o----------o
\ \
\ \
o K o L`
\ \
\ \
o L o new-branch (same commit as where old branch was at)
\
\
o old
당신이-빨리 감기 또는 비 빨리 감기 병합 중 하나를 사용하여 새 분기에 병합 할 수 있습니다 :
# From master branch, use fast-forward merge
git merge new-branch
# Or force a merge-commit with non-fast-forward
git merge --no-ff new-branch
대신을 rebase를 사용하면 cherry-pick
을 사용하여 new-branch
에 추가하는 커밋을 매우 선택적으로 처리 할 수 있으므로 커밋 범위와 단일 커밋을 모두 선택할 수 있으므로보다 세부적인 제어가 가능합니다.
작동하는 것처럼 보이지만 너무 더러워 보입니다. –