programing

내 마스터 브랜치에서 "중간"커밋을 팝업하고 폐기해야합니다.

nasanasas 2020. 9. 14. 21:16
반응형

내 마스터 브랜치에서 "중간"커밋을 팝업하고 폐기해야합니다. 내가 어떻게 해?


예를 들어, 다음 마스터 브랜치에서 이전 rebase로 인해 두 번째 인 커밋 af5c7bf16e6f04321f966b4231371b21475bc4da 만 삭제해야합니다.

commit 60b413512e616997c8b929012cf9ca56bf5c9113
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Tue Apr 12 23:50:15 2011 +0200

    add generic config/initializers/omniauth.example.rb

commit af5c7bf16e6f04321f966b4231371b21475bc4da
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Fri Apr 22 00:15:50 2011 +0200

    show github user info if logged

commit e6523efada4d75084e81971c4dc2aec621d45530
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Fri Apr 22 17:20:48 2011 +0200

    add multiple .container at blueprint layout

commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Thu Apr 21 19:55:57 2011 +0200

    add %h1 Fantastic Logo + .right for 'Sign in with Github'

나는 관리해야한다

  • 첫 번째 커밋 60b413512e616997c8b929012cf9ca56bf5c9113,
  • 세 번째 커밋 e6523efada4d75084e81971c4dc2aec621d45530 및
  • 마지막 커밋 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22

두 번째 커밋 만 "던져 버리기" af5c7bf16e6f04321f966b4231371b21475bc4da

어떻게 할 수 있습니까? 미리 감사드립니다 Luca


Rebase 또는 Revert 가 옵션입니다. Rebase는 실제로 기록에서 커밋을 제거하므로 두 번째 커밋이 존재하지 않은 것처럼 보입니다. 마스터 브랜치를 다른 리포지토리로 푸시 한 경우 문제가됩니다. 이 경우 rebase 후에 푸시를 시도하면 git은 non fast-forward merges 오류를 거부 합니다.

되돌리기는 분기가 다른 저장소와 공유 된 경우 올바른 솔루션입니다. git revert af5c7bf16af5c7bf16이 도입 한 변경 사항을 간단히 되 돌리는 새 커밋을 만듭니다. 이렇게하면 기록이 다시 작성되지 않고 실수에 대한 명확한 기록이 유지되며 다른 저장소가 푸시를 수락합니다.

지우는 좋은 방법 git rebase -i <commit>^이 있습니다. 제거하려는 커밋 바로 전에 커밋으로 이동합니다. 대화 형 편집기는 해당 지점까지의 모든 커밋 목록을 보여줍니다. 선택, 스쿼시 등을 수행 할 수 있습니다.이 경우 지우려는 커밋 행을 제거 하고 파일을 저장합니다. Rebase가 작업을 완료합니다.


rebase가 옵션 인 경우 rebase하고 그냥 삭제할 수 있습니다.

$ git rebase -i 414ceffc^

rebase가 옵션이 아닌 경우 되돌릴 수 있습니다.

$ git revert af5c7bf16

여기에서받은 원본 답변의 모든 신용에도 불구하고 질문에 만족스럽게 답변 할 수있는 답변을 찾지 못했습니다. 커밋을 제거하거나 히스토리 중간에서 커밋 모음을 제거해야하는 상황에 처해 있다면 다음과 같이 제안합니다.

  • 모든 커밋을 포함하는 헤드에서 새 분기를 만들고 전환합니다.
  • Revert the new branch back to the point you want to start a new base from.
  • Then, (here's the key point) cherry pick the subsequent commits you actually want to be applied after that from the original branch to the new one, and skip the commits you don't want anymore (i.e. the ones you are deleting).
  • If desired, rename the original branch to something indicating it's old code, and then rename your new branch what the original one was called.
  • Finally, push your changes to your remote repo (if using one). You'll probably need to use a "forced push". If your collaborators have issues pulling the revisions, it might be easiest for them to just clone the repo again from the remote source. One way or another, you'll likely want to talk to them if you are ripping commits out of the middle of your history anyway!

Here's info on Cherry Picking: What does cherry-picking a commit with git mean?

Here's some on doing it with Tortoise Git (as I just did). It's definitely easier to use a gui utility for these sorts of operations! Cherry pick using TortoiseGit

참고URL : https://stackoverflow.com/questions/5757187/i-need-to-pop-up-and-trash-away-a-middle-commit-in-my-master-branch-how-can-i

반응형