Git의 브랜치에서 커밋 삭제


3231

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

하여 delete, 나는 커밋하지 않았다, 나는 미래에 밀어 넣기를 수행 할 때, 내 변화가 원격 지사에 밀어하지 않습니다 것처럼 그것이 의미한다.

git help를 읽고 사용해야 할 명령은 git reset --hard HEAD입니다. 이 올바른지?


41
분기에서 커밋 을 삭제 하는 방법을 묻는 Git 실행 취소 마지막 커밋 의 복제본 이 아니라고 생각합니다 . 또한 실제로 답변이 아닌 것이이 질문을 해결한다고 생각합니다. 그들은 모두하지, 마지막 커밋을 뒤로 하고 하나는 얼마 전에 발생 할 수 있습니다 커밋합니다. cherry-pickdelete
Chris

12
@Chris의 답변은 git rebase -i HEAD~10임의로 커밋을 선택하여 질문을 처리합니다. Git은 로그에서 제거한 커밋을 무시하고 하나씩 지정하는 커밋을 적용합니다. 나는 오늘이 명령을 사용하여 최상위 저장소를 유지하면서 내 repo에 대한 두 번째 및 세 번째 가장 최근 커밋을 제거했습니다. 다른 답변은 만족스럽지 않습니다.
MST

@MST 그렇습니다. 수용된 답변의 옵션 중 하나라도이 질문에 대한 답변이 아니라고 말했지만, 당신은 절대적으로 옳습니다 – 그 명령이 작동하는 것 같습니다
Chris

답변:


4125

주의 : git reset --hard 작업 디렉토리 변경 사항을 삭제 합니다. 이 명령을 실행하기 전에 유지하려는 로컬 변경 사항숨기 십시오 .

커밋에 앉아 있다고 가정하면이 명령은 그것을 커밋합니다 ...

git reset --hard HEAD~1

이것은 HEAD~1머리 앞에 커밋을 의미합니다.

또는의 출력을보고 git log백업하려는 커밋의 커밋 ID를 찾은 다음이 작업을 수행 할 수 있습니다.

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

이미 푸시 한 경우 제거하려면 강제 푸시를 수행해야합니다.

git push origin HEAD --force

그러나 다른 사람들이 그것을 뽑았을 경우 새 지점을 시작하는 것이 좋습니다. 그들이 당길 때, 그것은 단지 그것을 그들의 일에 합병시킬 것이고, 당신은 그것을 다시 밀어 올릴 것입니다.

이미 푸시 한 경우을 사용 git revert하여 변경 내용을 취소하는 "미러 이미지"커밋을 만드는 것이 좋습니다 . 그러나 두 커밋은 모두 로그에 있습니다.


참고 git reset --hard HEAD-WORK IN PROGRESS를 제거하고 싶을 때 좋습니다. 가장 최근의 커밋으로 다시 설정하고 작업 트리 및 인덱스의 모든 변경 사항을 지 웁니다.


마지막으로, "삭제 된"커밋을 찾아야 할 경우, git reflog저장소를 가비지 수집하지 않은 경우 일반적으로 존재 합니다.


59
HEAD~1또는 그냥 HEAD^. 밀면 git revert대신 사용해야 합니다.
Jakub Narębski

13
분명히 당신은 또한 머리에서 커밋 HEAD~n을 "돌아 가기" 위해 사용할 수 있습니다 n. 이 시점에서 => 진행중인 작업 삭제 ... --hard HEAD로 해석 할 수도 있습니다 HEAD~0.
nuala

13
@ beamrider9 imho git rebase는 거의 항상 커밋을 삭제하는 더 좋은 방법입니다 (Greg Hewgill의 답변에 설명 된 것처럼).
노아 서스 먼

20
커밋 트리에서 변경 사항을 삭제하지는 않습니다. OP는 이미 커밋을 요청했습니다. 을 reset --hard확인 log --oneline --all하고을 확인하면 커밋은 여전히 ​​트리에 남아 있습니다. 이 커밋을 트리에서 어떻게 삭제합니까? 감사.
iGbanam

17
reset --soft진행중인 되돌리기 작업없이 로컬 커밋을 삭제 하는 데 사용하십시오 !

704

아직 커밋을 푸시하지 않은 경우 git rebase -i해당 커밋을 제거하는 데 사용할 수 있습니다 . 먼저 커밋이 얼마나 멀리 있는지 확인하십시오. 그런 다음 수행하십시오.

git rebase -i HEAD~N

~N수단은 마지막 N커밋을 리베이스합니다 ( N예 : 숫자 여야 함 HEAD~10). 그런 다음 Git이 제공하는 파일을 편집하여 문제가되는 커밋을 삭제할 수 있습니다. 해당 파일을 저장하면 Git은 삭제 한 커밋이 존재하지 않는 것처럼 다음 커밋을 모두 다시 작성합니다.

Git Book은 그림과 예제로 rebasing에 대한 좋은 섹션을 가지고 있습니다.

당신이 뭔가 변경하는 경우 때문에,이 생각에주의 다른 밀어를, 또 다른 방법은 당신이 힘 푸시를 할 계획하지 않는 한 필요합니다.


2
참고 : 마지막 커밋 일괄 처리에서 --no-ff 병합이 발생하면 rebase는 다음을 처리합니다 . ( 이 페이지의 -p 아래에 언급되어 있습니다. 당신은 더 이상 "이 커밋 편집, 그 하나를 sqush"등의 선택으로 팝업을 얻지 못합니다. 누구든지 해결책을 알고 있습니까?
Bukov

4
당신이 그것을 밀었다면? (원격 저장소를 사용하여 나만)
Costa

6
@Costa를 사용 push -f하면 강제로 푸시하고 원격 브랜치를 로컬 브랜치로 바꿀 수 있습니다 . 그것이 자신의 원격 저장소라면 문제 없습니다. 그 동안 다른 누군가가 가져 오면 문제가 시작됩니다.
Greg Hewgill

3
GitHub에 비해 너무 큰 데이터 파일을 추가하고 커밋했습니다. 푸시하려고 할 때 파일이 너무 커서 GitHub가 거부했습니다. 내가하고 싶었던 것은이 하나의 커밋을 취소하는 것과 관련이없는 몇 가지 관련없는 커밋을 저장하는 것입니다. git rebase -i HEAD~5명령이었다 정확히 내가 완전히이 내 지역의 repo에서 커밋 제거하기 위해 필요한 것! 감사!
aldo

4
@dumbledad :를 사용 rebase -i하면 삭제 된 커밋에 해당하는 변경 내용이 유지되지 않습니다.
Greg Hewgill

517

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

git rebase -i <commit>~1

이것은 -i커밋하기 직전 에 대화식 모드 에서 리베이스를 시작합니다 . 에디터는 그 이후로 모든 커밋을 나열하기 시작합니다. 삭제하려는 커밋이 포함 된 행을 삭제하고 파일을 저장하십시오. Rebase는 나머지 작업을 수행하고 해당 커밋 만 삭제하고 다른 모든 작업은 다시 로그로 재생합니다.


3
thx, btw 빈 커밋과 같은 문제가 발생하면 사용할 수 있습니다.git rebase --continue
realgt

8
git rebase -i HEAD~1
mmell

2
와우 저. git rebase -i HEAD~1정말 repo를 많이 청소했습니다! 정확히 무엇을했는지 말하기는 어렵지만 모든 것이 훨씬 깔끔해 보입니다. 사실 약간 놀랍습니다.
Charles Wood

7
커밋이 제거되지 않고 단순히 목록에서 제거된다는 점에 주목할 가치가 있다고 생각합니다. 엉망인 경우 reflog를 사용하여 커밋을 다시 가져올 수 있습니다 .
Zaz

6
줄을 삭제하면 d / drop과 동일합니까?
Leo

344

방금 커밋을 시도한 사람이 Git을 사용하는 실수로 인해 해당 작업을 모두 삭제하려는 이유를 알 수 없으므로이 답변을 추가하고 있습니다!

작업을 유지하고 해당 커밋 명령을 '실행 취소'하려는 경우 (리포지토리로 푸시하기 전에 적발) :

git reset --soft HEAD~1

마지막 커밋 이후에 진행중인 작업을 제거하지 않으려면 --hard 플래그를 사용하지 마십시오 .


5
이유는 다음과 같습니다. 커밋 한 개발 서버에서 작은 작업을 수행합니다. 그런 다음 해당 서버에 나가는 HTTPS 액세스 권한이 없으므로 커밋을 어디에서나 밀 수 없습니다. 결코 발생하지 않은 것처럼 가장 쉬운 척하고 로컬 컴퓨터에서 패치를 다시 실행하십시오.
Steve Bennett

1
@KarthikBose는 항상 reflog가있을 것입니다. git reset --hard HEAD~1이전의 최신 커밋이 reflog를 통해 사용 가능 하게 된 후에도 (만료 될 때까지); 여기 참조 : gitready.com/intermediate/2009/02/09/...
codeling

4
감사. 이 답변은 순위가 높아지거나 수락 된 답변에 포함되어야합니다. 커밋 삭제! = 커밋을 되돌립니다.
Alsciende

2
@ RandolphCarter : 당신은 여전히 ​​커밋되지 않은 변경 사항을 잃게됩니다.
naught101

7
@Rob의 예는 소스 제어에 있어서는 안되는 비밀 (예 : 비밀번호)이 포함 된 파일을 실수로 커밋하는 경우입니다. 로컬 커밋은 실행 취소 된 것이 아니라 파괴 되어야 하므로 절대 서버로 푸시되지 않습니다.
Bob Meyers

141

전체 커밋 제거

git rebase -p --onto SHA^ SHA

"SHA"를 제거하려는 참조로 대체하십시오. 해당 명령에서 "^"는 리터럴입니다.

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


26
이 답변을 어떻게 더 많이 표명 할 수 있습니까 ??? 다른 솔루션은 대화식으로 수행하거나 상위 커밋을 제거하는 방법을 보여줍니다.
ribamar

5
-p, --preserve-merges 병합 커밋이 도입 한 커밋을 재생하여 기록을 병합하는 대신 병합 커밋을 다시 만듭니다. 병합 충돌 해결 또는 커밋 병합에 대한 수동 수정 사항은 유지되지 않습니다.
raittes 2016 년

5
이것은 실제 정확한 답변입니다
Hamman Samuel

9
"SHA를 제거하려는 참조로 바꾸십시오"라고되어 있지만이 줄에는 SHA가 두 번 있습니다. 여기 내가 한 일이 있습니다. git rebase -p --onto 5ca8832c120 ^ 5ca8832c120 그러나 아무것도 바뀌지 않았습니다. 동일한 SHA를 두 번 사용해야합니까? 그렇지 않은 경우 커밋을 제거 할 SHA는 무엇이고 다른 SHA는 무엇입니까?
Rubicksman

3
와아, 그것은 완벽하게 일했다! 이것이 정답입니다!
Liran H

51

변경 사항을 게시하지 않은 경우 최신 커밋을 제거하려면 다음을 수행하십시오.

$ git reset --hard HEAD^

(이는 커밋되지 않은 모든 변경 사항도 제거하므로주의해서 사용하십시오).

삭제 될 커밋을 이미 게시 한 경우 git revert를 사용하십시오.

$ git revert HEAD

작동하지 않았습니다. 내가 자식 로그를 할 때, 내가하는 이유에 관계없이 모든 것이 여전히 존재합니다. 커밋을 더 추가합니다. 나는 역사를 정리하고 싶다.
Costa

@ 코스타 : 작동하지 않는 것은 무엇입니까 (즉, 어떤 버전을 사용 했습니까), 어떻게 로그를 git 했습니까?
Jakub Narębski

이 Q & A에서 거의 모든 것을 시도했습니다. (가장 최근에 git revert HEAD를 시도했습니다) 내 자식 로그 :tree = log --all --graph --format=format:'%C(bold blue)%h%C(reset) %C(dim black)%s%C(reset)%C(bold red)%d%C(reset) %C(green)by %an, %ar%C(reset)'
Costa

1
커밋을 삭제하고 싶습니다 (예 : 절대 존재하지 않는 것처럼). 나는 몇 가지 새로운 커밋으로 이상한 코딩 모험을 시작했으며 결국 모두 쓰레기가되었습니다. 내 자식 로그에서 그것들을 어떻게 지울 수 있습니까?
Costa

2
거룩한 쓰레기는 내가 원하는 것을 마술처럼 했어요 .... 그 명령들 중 어느 것이 그랬습니까? !!?!
Costa

44

저장소에서 커밋 2 & 4를 제거하고 싶다고 가정 해보십시오.

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

참고 : 및를 사용 --hard하고 있으므로 리포지토리에 대한 관리자 권한이 있어야합니다-f .

  • git checkout b3d92c5 마지막으로 사용 가능한 커밋을 확인하십시오.
  • git checkout -b repair 작업 할 새 브랜치를 만듭니다.
  • git cherry-pick 77b9b82 커밋 3을 통해 실행하십시오.
  • git cherry-pick 2c6a45b 커밋 1을 통해 실행하십시오.
  • git checkout master 체크 아웃 마스터.
  • git reset --hard b3d92c5 마지막 사용 가능한 커밋으로 마스터를 재설정하십시오.
  • git merge repair 새 지점을 마스터에 병합하십시오.
  • git push -f origin master 마스터를 원격 저장소로 푸시하십시오.

1
마지막 단계는 git push -f origin master옵션이없는 것입니다--hard
Vivex

2
내 생각 commit 0보다 이전 버전입니다 commit 1. 왜 commit 3체리 픽에 의해 통과했는지 그리고 다음에 의해 시작 되는지 알려주십시오 commit 1. 의 체크 아웃 후 b3d92cd( commit 0) 나는 체리 - 선택 기대 commit 1commit 3. 감사.
Jarek C

@JarekC 내가 뭔가 잘못 보지 않는 한 최상위 커밋이 가장 최신 커밋이라고 생각합니다 ...
Jeff Huijsmans

41
git reset --hard commitId

git push <origin> <branch> --force

PS : CommitId는 되돌리려는 것을 나타냅니다.


git push --force <origin> <branchName>. 분기 이름을 언급하지 않고 원격의 모든 파일을 변경할 수 있습니다.
sheelpriy

39

히스토리 변경

마지막 커밋을 삭제하지 않고 마지막 n 커밋의 특정 커밋을 삭제하려는 경우 다음을 수행하십시오.

git rebase -i HEAD~<number of commits to go back>그래서 git rebase -i HEAD~5당신이 지난 5 커밋을보고 싶어합니다.

그런 다음 텍스트 편집기 에서 제거하려는 모든 커밋 옆에 있는 단어 pick를 변경 drop하십시오. 편집기를 저장하고 종료하십시오. 짜잔!

또한 변경 내역

시도하십시오 git revert <commit hash>. 되돌리기 는 지정된 커밋을 취소 하는 새로운 커밋을 만듭니다 .


drop키워드가 정의되지 않았습니다. 커밋을 삭제하려면 전체 줄을 제거하십시오.
Shayan Salehian

1
나를 위해 드롭은 키워드로 정의되었지만 드롭을 수행해도 기록에서 커밋이 제거되지 않는 것 같습니다. 그러나 대화식 리베이스에서 라인을 제거했습니다.
Adam Parkin

이것이 바로 내가 필요한 것입니다. 훌륭하게 작동합니다. 감사!
diekunstderfuge

30

최신 커밋을 수정하려면 다음을 수행하여 커밋을 실행 취소하고 커밋을 취소하십시오.

git reset HEAD~1

그러면 파일을 스테이징 한 git add 명령 전에 리포지토리가 상태로 돌아갑니다. 변경 사항은 작업 디렉토리에 있습니다. HEAD ~ 1은 분기의 현재 팁 아래 커밋을 나타냅니다.

N 커밋을 커밋하지 않고 작업 디렉토리에서 코드 변경 사항을 유지하려면 다음을 수행하십시오.

git reset HEAD~N

최신 커밋을 제거하고 코드 변경 사항을 유지하지 않으려면 "하드"재설정을 수행하면됩니다.

git reset --hard HEAD~1

마찬가지로 마지막 N 커밋을 삭제하고 코드 변경 사항을 유지하지 않으려는 경우 :

git reset --hard HEAD~N

22
git rebase -i HEAD~2

여기서 '2'는 리베이스하려는 커밋 수입니다.

'git rebase -i HEAD`

모든 커밋을 리베이스하려는 경우.

그런 다음이 옵션 중 하나를 선택할 수 있습니다.

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

이 줄은 순서를 바꿀 수 있습니다. 그것들은 위에서 아래로 실행됩니다. 여기에서 줄을 제거하면 커밋이 손실됩니다. 그러나 모든 것을 제거하면 리베이스가 중단됩니다. 빈 커밋은 주석 처리됩니다.

옵션 "d"를 사용하여 커밋을 제거하거나 커밋이있는 행을 제거하면됩니다.


최신 git 버전에는 더 이상 옵션 d 가 없습니다 . rebase에서 커밋이있는 줄을 제거하면됩니다.
Oleg Abrazhaev

17

로컬 지점에서 삭제하려면

git reset --hard HEAD~1

원격 지점에서 삭제하려면

git push origin HEAD --force

12

[빠른 답변]

예를 들어 다음과 같은 많은 대안이 있습니다.

  • 대안 1 :

    git rebase -i <YourCommitId>~1
    

    되돌릴 커밋 수에 대한 YourCommitId를 변경하십시오.

  • 대안 2 :

    git reset --hard YourCommitId
    git push <origin> <branch> --force
    

    되돌릴 커밋 수에 대한 YourCommitId를 변경하십시오.

    진행중인 작업을 잃을 수 있으므로이 옵션을 권장하지 않습니다.

  • 대안 3 :

    git reset --soft HEAD~1
    

    작업을 유지하고 커밋을 실행 취소 만 할 수 있습니다.


감사합니다 감사합니다 감사합니다 감사합니다 (Y)
Habib Rehman

11

출처 : https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

마지막 커밋 삭제

예를 들어 마지막 커밋

git push origin + aa61ab32 ^ : 마스터

이제이 커밋을 삭제하고 다음을 수행하는 쉬운 방법을 원합니다.

단계

  1. 먼저 현재 커밋의 부모로 분기를 재설정하십시오.

  2. 리모컨에 억지로 밀어 넣으십시오.

git reset HEAD^ --hard

git push origin -f

특정 커밋의 경우 재설정을 원합니다.

git reset bb676878^ --hard

git push origin -f

9

이 작업을 수행하는 다른 방법이 있습니다.

되돌리려는 지점을 체크 아웃 한 다음 로컬 작업 사본을 원격 서버에서 최신으로 유지하려는 커밋으로 다시 재설정하십시오 (이후에는 계속됩니다). 이를 위해 SourceTree에서 마우스 오른쪽 단추를 클릭하고 "BRANCHNAME을이 커밋으로 재설정"을 선택했습니다. 커맨드 라인은 다음과 같습니다.

git reset --hard COMMIT_ID

방금 원격에서 지점을 체크 아웃 했으므로 손실에 대해 걱정할 로컬 변경 사항이 없습니다. 그러나 만약 당신이 그렇게하면 그것들을 잃을 것입니다.

그런 다음 저장소의 로컬 디렉토리로 이동하여 다음 명령을 실행하십시오.

git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

로컬 리포지토리에서 현재 커밋 이후 모든 커밋이 지워지지 만 해당 커밋 하나만 지워집니다.


9

실수:

나는 git rebase -i --root브랜치에서 무의식적으로 마스터와 다른 첫 번째 커밋을 철회 할 수 있다고 생각 했습니다 (Windows 용 GitHub 기본보기는 마스터와 비교하여 전체를 숨 깁니다).

900 개 이상의 커밋이 Sublime에로드되는 동안 Silicon Valley 수염을 키 웠습니다. 변경없이 종료 한 후, 900 명 이상의 개인 커밋이 모두 무책임하게 리베이트하기 때문에 배터리를 충전 한 다음 면도를 계속했습니다.

Git을 이기고 원래 시간을 보존하기로 결정한이 로컬 리포지토리를 삭제하고 원격에서 다시 복제했습니다.

이제 내가 제거하고 싶은 마스터에 대한 가장 최근의 불필요한 커밋을 다시 추가 했으므로 계속 진행했습니다.

옵션 소진 :

나는 원하지 않았다 git revert-그것은 추가 커밋을 만들어서 Git에게 우위를 제공했다.

git reset --hard HEAD을 확인한 후 reflog마지막으로 유일한 HEAD것은 클론이 아니 었습니다.

최신 SHA를 얻으려면 github.com에서 원격 저장소를 확인했습니다.

생각한 후에 git reset --hard <SHA>, 나는 다른 지점을 마스터로 업데이트하고 1 ... 2 ... 똥! 커밋이 돌아왔다-Git 승.

마스터에게 다시 체크 아웃하고, 시도 할 시간을 보낸 git rebase -i <SHA>다음 라인을 제거하십시오 ... " 여기서 줄을 제거하면 커밋 할 수 없습니다 ". 아 .. 2.8.3 릴리스 정보 에서 n00b의 새로운 기능 에 대해 설명했습니다 .

해결책:

git rebase -i <SHA>그때 d, drop = remove commit.

확인하기 위해 다른 지점에 체크 아웃했으며 voila-마스터에서 가져 오기 / 당기기 위해 커밋을 숨기지 않았습니다.

https://twitter.com/holman/status/706006896273063936

당신에게 좋은 일.


8

위의 모든 명령은 커밋을 수행하기 전의 작업 트리 및 색인 상태를 복원하지만 저장소의 상태는 복원하지 않습니다. 그것을 보면, "제거 된"커밋은 실제로 제거되지 않고 단순히 현재 브랜치의 끝에있는 것이 아닙니다.

도자기 명령 으로 커밋을 제거 할 방법이 없다고 생각 합니다 . 유일한 방법은 로그 및 참조 로그에서 파일을 제거한 다음을 실행하는 것 git prune --expire -now입니다.


1
답변이 StackOverflow에 표시되는 순서는 고정되어 있지 않습니다. "위의 모든 명령"을 참조하지 마십시오. 자신의 답변을 독립적으로 만드십시오.
Pascal Cuoq 2012 년

이 답변은 완전히 정확하지 않습니다. git prune 실제로 "porcelain"명령 중 하나입니다 . 또한 reflog를 완전히 지우려는 경우는 거의 없습니다 (한 유스 케이스는 리포지토리에서 민감한 정보를 제거하는 것이지만, 내가 말했듯이 드문 유스 케이스입니다). 데이터를 복구해야 할 경우를 대비하여 오래된 커밋을 reflog에 유지하려는 경우가 종종 있습니다. Pro Git : 9.7 Git 내부-유지 보수 및 데이터 복구를 참조하십시오 .

8

커밋과 되돌리기를 보여주는 기록을 유지하려면 다음을 사용해야합니다.

git revert GIT_COMMIT_HASH

왜 복귀하는지 설명하는 메시지를 입력 한 후 다음을 수행하십시오.

git push  

발행 git log하면 "잘못된"커밋 및 되돌리기 로그 메시지가 모두 표시됩니다.


예, 그러나 OP는 그것이 원하는 것이 아니라는 것이 분명했습니다.
Steve Bennett

7

마지막 커밋을 엉망으로 만들었을 때 (잘못된 메시지, 변경 사항을 추가하지 않은 경우) 공개 리포지토리로 푸시하기 전에 수정하고 싶은 이유는 무엇입니까?

git commit --amend -m "New message here"

새로 준비한 변경 사항이 있으면 마지막 커밋과 결합되어 제거하려는 커밋을 대체합니다.

물론 커밋을 푸시 한 후에 커밋을 수정하면 히스토리를 다시 작성하므로 의미를 이해해야합니다.

이전 커밋 메시지를 사용하려는 경우 '-m'대신 '--no-edit'옵션을 전달할 수도 있습니다.

문서 : http://git-scm.com/docs/git-commit.html


2
그것은 OP가 요구하는 것이 아닙니다.
Steve Bennett

5

이미 푸시 한 경우 먼저 HEAD ($ GIT_COMMIT_HASH_HERE) 에있을 커밋을 찾은 후 다음을 실행하십시오.

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

그런 다음 리포지토리가 복제 된 각 위치에서 다음을 실행하십시오.

git reset --hard origin/master

5

내가 커밋하고 푸시 할 때 내가 보통하는 일

git reset --hard HEAD~1

git push -f origin

이 도움을 바랍니다


5

나는 이미 밀었다. 일부 커밋을 다시 반환해야합니다. 유무는 많은 변화를 시도하지만 에서 저스틴 자식 부시을 통해 나를 위해 잘 작동한다 :

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

4

현지 지점에서 재설정

git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

원점으로 강제 푸시

git push -f origin

3

임시 폴더에 코드를 백업하십시오. 다음 명령은 서버와 동일하게 재설정됩니다.

git reset --hard HEAD
git clean -f
git pull

변경 사항을 유지하고 최근 커밋을 제거하려는 경우

git reset --soft HEAD^
git pull


2

로컬 커밋 삭제

위의 이미지에서 볼 수 있듯이 되돌리기 "테스트 변경 2"커밋을 삭제하고 싶습니다 (SHA1 ID : 015b5220c50e3dfbb1063f23789d92ae1d3481a2 ( gitkgit bash에서 명령 을 사용하여 SHA1 ID를 얻을 수 있음 )).

이를 위해 사용할 수 있습니다 (아래의 모든 명령은 로컬에서만 작동합니다. 삭제 후 푸시해야합니다).

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2// 해당 커밋에 백업합니다 ( 테스트 변경 4 커밋 의 SHA1 ID 는 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2. git reset --hard HEAD~1 // 한 번의 커밋 전에 백업합니다.
  3. git reset --hard HEAD^ // git에서 마지막 커밋을 제거하려면

삭제 후 :

커밋 삭제 후


2

git reset --hard HEAD~1
당신은 지금 이전 머리에있을 것입니다. 가지를 당깁니다. 새 코드를 푸시하십시오. 커밋은 자식에서 제거됩니다


변경 사항을 이미 푸시하지 않은 경우 이 경우 하드 리셋은 리모컨을 정리하지 않습니다. 이 경우 rebase가 좋은 옵션입니다
c0der512

1

git reset-하드

git push origin HEAD-힘

하나 이상의 커밋에 태그가 지정된 경우 먼저 태그를 삭제하십시오. 그렇지 않으면 태그 된 커밋이 제거되지 않습니다.



0

제 경우에는이 pupose에 대한 내 마법 코드는 다음과 같습니다.

git reset --hard @{u}

그것을 테스트하고 말해주세요. 나는 몇 가지 다른 것을 시도했지만 이것 만이 나를 도왔다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.