source

git 기록에서 병합 커밋 제거

nicesource 2023. 8. 27. 09:39
반응형

git 기록에서 병합 커밋 제거

내 Git 이력은 다음과 같습니다.

Git history

보라색 커밋을 하나로 압축하고 싶습니다.내 커밋 로그에서 다시는 그들을 보고 싶지 않습니다.

제가 해봤는데요.git rebase -i 1하지만1파란색 가지에 있습니다(사진). 여전히 보라색 가지에 모든 커밋이 표시됩니다.

커밋 로그에서 보라색 분기를 완전히 제거하려면 어떻게 해야 합니까?

git rebase -i <sha before the branches diverged>이렇게 하면 병합 커밋을 제거할 수 있으며 로그는 원하는 대로 한 줄로 표시됩니다.더 이상 원하지 않는 커밋을 삭제할 수도 있습니다.당신의 기지가 작동하지 않는 이유는 당신이 충분히 돌아가지 않았기 때문입니다.

경고: 이 작업을 통해 기록을 다시 작성하고 있습니다.원격 저장소에 푸시된 변경 사항으로 이 작업을 수행하면 문제가 발생합니다.로컬 커밋에서만 이 작업을 수행하는 것이 좋습니다.

원래 상태의 repo부터 시작

Original repo history

병합 커밋을 제거하고 분기를 메인 라인의 단일 커밋으로 스쿼시하려면 다음과 같이 하십시오.

Squashed commits, no merge commit

다음 명령을 사용합니다(5 및 1을 해당하는 커밋의 SHA로 대체).

git checkout 5
git reset --soft 1
git commit --amend -m '1 2 3 4 5'
git rebase HEAD master

병합 커밋을 유지하되 분기 커밋을 하나로 압축하려면:

Squashed commits, retained merge commit

다음 명령을 사용합니다(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

병합 커밋을 제거하고 분기에서 개별 커밋으로 바꾸려면 다음과 같이 하십시오.

Branch moved into mainline, no merge commit

다음을 수행합니다(5를 해당 커밋의 SHA로 대체).

git rebase 5 master

그리고 마지막으로, 가지를 완전히 제거하는 것은

Branch removed entirely

다음 명령을 사용합니다(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

반응형