Git의 지점에서 삭제하십시오


질문

 

나는 커밋을 삭제하는 방법을 알고 싶습니다.

삭제로, 나는 그것이 내가 그 커밋을하지 않고 미래에 푸시를 할 때 마치 변경 내용이 원격 지점에 푸시되지 않을 것입니다.

Git 도움말을 읽었으며, 내가 사용해야 할 명령은 git 재설정 - 하드 헤드라고 생각합니다.이 올바른지?


답변

 

조심스럽게 : Git Reset - Hard는 작업 디렉토리 변경 사항을 삭제합니다.이 명령을 실행하기 전에 계속 유지하려는 로컬 변경 사항을 숨기십시오.

당신이 그 커밋에 앉아 있다고 가정하면,이 명령은 그것을 쓸 것입니다 ...

git reset --hard HEAD~1

머리 ~ 1은 머리를하기 전에 커밋을 의미합니다.

또는 Git 로그의 출력을 볼 수 있으며, 백업 할 커밋의 커밋 ID를 찾은 다음 다음을 수행 할 수 있습니다.

git reset --hard <sha1-commit-id>

이미 그것을 밀었다면, 당신은 그것을 제거하기 위해 힘을 푸시해야합니다 ...

git push origin HEAD --force

그러나 다른 사람들이 그것을 끌어 당길 수 있다면, 당신은 새로운 지점을 시작하는 것이 좋을 것입니다.왜냐하면 그들이 당길 때, 그것은 단지 그것을 그들의 작품으로 병합 할 것이고, 당신은 그것을 다시 밀어 넣을 것입니다.

이미 푸시하면 Git Revert를 사용하는 것이 좋습니다. 변경 사항을 취소 할 수있는 "미러 이미지"커밋을 만듭니다.그러나 두 커밋 모두 로그에있을 것입니다.


FYI - GIT 재설정 - 진행중인 작업을 제거하고 싶다면 Hhard Head가 훌륭합니다.가장 최근의 커밋으로 돌아가서 작업 트리 및 색인의 모든 변경 사항을 지 웁니다.


마지막으로, 당신이 "삭제"라는 커밋을 찾아야하는 경우, 가비지가 저장소를 수집하지 않는 한 일반적으로 Git Relfog에 있습니다.



답변

아직 확약을 누르지 않았다면 Git Rebase -i를 사용하여 해당 커밋을 제거 할 수 있습니다.첫째, 커밋이 얼마나 멀리 있는지 알아보십시오 (대략).그런 다음 :

git rebase -i HEAD~N

~ n은 마지막 n 커밋 (n은 숫자, 예를 들어 머리 ~ 10)이어야 함을 의미합니다.그런 다음 Git가 선물하는 파일을 편집하여 문제가되는 커밋을 삭제할 수 있습니다.해당 파일을 저장하면 GIT가 삭제 한 것과 같이 다음과 같은 모든 커밋을 다시 작성하지 않았습니다.

Git Book에는 그림과 예제로 리베이징에 좋은 부분이 있습니다.

그렇지 않으면이 문제에주의하십시오. 왜냐하면 당신이 다른 곳에서 밀었던 것을 바꾸면 힘을 할 계획이 아니면 다른 접근법이 필요합니다.



답변

또 다른 가능성은 내 개인적으로 가장 좋아하는 명령 중 하나입니다.

git rebase -i <commit>~1

이렇게하면 근거리가 틀림없는 직전에 대화식 모드에서 Rebase가 시작됩니다.편집기는 그 이후로 모든 커밋 목록을 나열합니다.삭제하려는 커밋이 포함 된 줄을 삭제하고 파일을 저장하십시오.Rebase는 나머지 작업을 수행하고 그 커밋 만 삭제하고 다른 모든 파일을 로그로 다시 재생할 것입니다.



답변

나는이 답변을 억제하는 이유를 보지 않기 때문에이 답변을 첨부하지 않으므로 Git을 사용하는 실수로 인해 실수로 인해 해당 작업을 모두 삭제하고 싶습니다.

당신이 당신의 일을 유지하고, 그냥 commit 명령을 compt (repo를 눌러 던지기 전에 잡히기 전에)

git reset --soft HEAD~1

마지막 커밋 이후 진행중인 작업을 파괴하지 않는 한 - 하드 플래그를 사용하지 마십시오.



답변

전체 커밋을 제거합니다

git rebase -p --onto SHA^ SHA

분명히 "Sha"를 제거하려는 참조로 대체하십시오.그 명령의 "^"은 리터럴입니다.

http://sethrobertson.github.io/gitfixum/fixup.html#change_deep.



답변

Repo에서 2 & 4를 제거하고 싶습니다.(숫자는 최신 버전이 높습니다. 0은 가장 오래된 커밋이고 4는 최신 커밋입니다)

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

참고 : --hard 및 -f를 사용하는 이후 REPO에 대한 관리자 권한이 있어야합니다.

Git Checkout B3D92C5 체크 아웃 마지막 사용 가능한 커밋. git checkout -b 복구 작업 할 새 지점을 만듭니다. Git Cherry-Pick 77B9B82는 커밋 3을 통해 실행됩니다. Git Cherry-Pick 2C6A45B는 커밋 1을 통해 실행됩니다. Git Checkout 마스터 체크 아웃 마스터. Git Reset - Hard B3D92C5 마스터를 마지막으로 사용 가능한 커밋으로 재설정하십시오. GIT 병합 수리는 새로운 지점을 마스터에 병합합니다. Git Push -f Origin Master 마스터를 원격 Repo로 누릅니다.

출처:https://stackoverflow.com/questions/1338728/delete-commits-from-a-branch-in-git