git 기록에서 병합 커밋 제거
내 Git 이력은 다음과 같습니다.
보라색 커밋을 하나로 압축하고 싶습니다.내 커밋 로그에서 다시는 그들을 보고 싶지 않습니다.
제가 해봤는데요.git rebase -i 1
하지만1
파란색 가지에 있습니다(사진). 여전히 보라색 가지에 모든 커밋이 표시됩니다.
커밋 로그에서 보라색 분기를 완전히 제거하려면 어떻게 해야 합니까?
도git rebase -i <sha before the branches diverged>
이렇게 하면 병합 커밋을 제거할 수 있으며 로그는 원하는 대로 한 줄로 표시됩니다.더 이상 원하지 않는 커밋을 삭제할 수도 있습니다.당신의 기지가 작동하지 않는 이유는 당신이 충분히 돌아가지 않았기 때문입니다.
경고: 이 작업을 통해 기록을 다시 작성하고 있습니다.원격 저장소에 푸시된 변경 사항으로 이 작업을 수행하면 문제가 발생합니다.로컬 커밋에서만 이 작업을 수행하는 것이 좋습니다.
원래 상태의 repo부터 시작
병합 커밋을 제거하고 분기를 메인 라인의 단일 커밋으로 스쿼시하려면 다음과 같이 하십시오.
다음 명령을 사용합니다(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
병합 커밋을 제거하는 방법
병합 커밋(2)을 제거하여 발생하지 않은 것처럼 하려면 명령은 다음과 같습니다.
git rebase --onto <sha of 1> <sha of 2> <blue branch>
그리고 이제 보라색 가지는 파란색 커밋 로그에 전혀 없고 다시 두 개의 다른 가지가 있습니다.그런 다음 자주색을 개별적으로 스퀴시하고 병합 커밋 없이 원하는 다른 조작을 수행할 수 있습니다.
원하는 것에 따라 이 문제를 해결하는 두 가지 방법이 있습니다.
솔루션 1: 자주색 커밋 제거, 기록 보존(롤백하려는 경우)
git revert -m 1 <SHA of merge>
-m 1
선택할 상위 행을 지정합니다.
보라색 커밋은 여전히 기록에 남아 있지만 사용자가 되돌렸기 때문에 해당 커밋의 코드를 볼 수 없습니다.
솔루션 2: 자주색 커밋을 완전히 제거합니다(Repo가 공유된 경우 운영 중단 변경).
git rebase -i <SHA before branching out>
및 보라색 커밋에 해당하는 삭제(라인 제거)를 수행합니다.
병합 후 커밋을 수행하지 않으면 이 작업이 덜 까다로울 수 있습니다.커밋을 추가하면 다음 기간 동안 충돌이 발생할 가능성이 높아집니다.revert/rebase
.
작업을 완전히 제어하고 유지하려는 병합 커밋을 유지하려면 최신 접근 방식을 사용합니다.
git rebase -i -r
언급URL : https://stackoverflow.com/questions/17577409/git-remove-merge-commit-from-history
'source' 카테고리의 다른 글
Ajax 내부의 Javascript 변수에 액세스 성공 (0) | 2023.08.27 |
---|---|
url 매개 변수를 javascript/jquery로 대체하는 방법은 무엇입니까? (0) | 2023.08.27 |
jQuery의 mouse out()과 mouse leave()의 차이점은 무엇입니까? (0) | 2023.08.27 |
PHP - strtime, 시간대 지정 (0) | 2023.08.27 |
CSS에서 !important는 무엇을 의미합니까? (0) | 2023.08.22 |