내 Git 기록은 다음과 같습니다.
보라색 커밋을 하나의 커밋으로 스쿼시하고 싶습니다. 내 커밋 로그에서 다시는보고 싶지 않습니다.
나는을 시도했지만 파란색 가지에 git rebase -i 1
있지만 1
(그림 참조) 보라색 가지에있는 모든 커밋을 볼 수 있습니다.
커밋 로그에서 퍼플 브랜치를 완전히 제거하려면 어떻게해야합니까?
내 Git 기록은 다음과 같습니다.
보라색 커밋을 하나의 커밋으로 스쿼시하고 싶습니다. 내 커밋 로그에서 다시는보고 싶지 않습니다.
나는을 시도했지만 파란색 가지에 git rebase -i 1
있지만 1
(그림 참조) 보라색 가지에있는 모든 커밋을 볼 수 있습니다.
커밋 로그에서 퍼플 브랜치를 완전히 제거하려면 어떻게해야합니까?
답변:
마 git rebase -i <sha before the branches diverged>
이 당신이 병합을 제거 할 수 커밋하고 당신이 원하는대로 로그는 하나 개의 라인을 것입니다. 더 이상 원하지 않는 커밋을 삭제할 수도 있습니다. 리베이스가 작동하지 않는 이유는 충분히 멀리 돌아 가지 않았기 때문입니다.
경고 :이 작업을 수행하면서 기록을 다시 작성하고 있습니다. 원격 리포지토리에 푸시 된 변경 사항으로이 작업을 수행하면 문제가 발생합니다. 로컬 커밋으로 만이 작업을 수행하는 것이 좋습니다.
git rebase
제거됩니다.
원래 상태의 저장소로 시작
병합 커밋을 제거하고 분기를 메인 라인의 단일 커밋으로 스쿼시하려면
다음 명령을 사용하십시오 (5 및 1을 해당 커밋의 SHA로 대체).
git checkout 5
git reset --soft 1
git commit --amend -m '1 2 3 4 5'
git rebase HEAD master
병합 커밋을 유지하지만 분기 커밋을 하나로 스쿼시하려면 :
다음 명령을 사용하십시오 (5, 1 및 C를 해당 커밋의 SHA로 대체).
git checkout -b tempbranch 5
git reset --soft 1
git commit --amend -m '1 2 3 4 5'
git checkout C
git merge --no-ff tempbranch
git rebase HEAD master
병합 커밋을 제거하고 분기에서 개별 커밋으로 바꾸려면
그냥하세요 (5를 해당 커밋의 SHA로 대체) :
git rebase 5 master
마지막으로 가지를 완전히 제거하려면
다음 명령을 사용합니다 (C와 D를 해당 커밋의 SHA로 대체).
git rebase --onto C D~ master
git rebase 5 master
경우, 이유는 없다 "ABC 1 2 3 4 5 ... D"순서는?
master
공통되지 않는 커밋을 가져와 . 은 커밋 의 혈통의 일부가 아닌 , 그 위에 이동 첫 번째입니다 . 5
5
C
5
5
git rebase C 5; git rebase 5 master
만약 당신이하고 싶은 것이 합병 커밋을 제거하는 것 뿐이라면 (2) 그것이 결코 일어나지 않은 것처럼 보이게하는 것입니다. 명령은 다음과 같습니다.
git rebase --onto <sha of 1> <sha of 2> <blue branch>
이제 보라색 가지가 파란색 커밋 로그에 전혀 없으며 두 개의 개별 가지가 다시 있습니다. 그런 다음 보라색을 독립적으로 스쿼시하고 병합 커밋없이 원하는 다른 조작을 수행 할 수 있습니다.
원하는 사항에 따라이 문제를 해결하는 방법에는 두 가지가 있습니다.
해결 방법 1 : 보라색 커밋을 제거하고 기록을 보존합니다 (롤백하려는 경우).
git revert -m 1 <SHA of merge>
-m 1
선택할 상위 라인을 지정합니다.
보라색 커밋은 여전히 역사에 있지만 되돌 렸으므로 해당 커밋의 코드는 볼 수 없습니다.
해결 방법 2 : 퍼플 커밋을 완전히 제거 (리포지토리가 공유되는 경우 중단 변경)
git rebase -i <SHA before branching out>
퍼플 커밋에 해당하는 삭제 (줄 제거).
병합 후 커밋이 이루어지지 않으면 덜 까다로울 것입니다. 추가 커밋은 revert/rebase
.
1 - 1 = 0
. 그러나 보라색 커밋을 리베이스하면 다시 리베이스하지 않는 한 되 돌린 패치를 남겨 둡니다. 그렇지 않은 경우 -1
이력에 적용 하는 것이 아니라 0
, 원하지 않는 변경 사항을 남겨 두는 것과 같습니다 .