etc./StackOverFlow

GitHub에서 커밋을 제거하려면 어떻게 해야 하나요? [복제하다]

청렴결백한 만능 재주꾼 2021. 12. 28. 01:51
반응형

질문자 :hectorsq


"실수로" 커밋을 GitHub에 푸시했습니다.

이 커밋을 제거할 수 있습니까?

내 GitHub 리포지토리를 이 커밋 이전의 상태로 되돌리고 싶습니다.



참고: 아래 주석에서 git rebase -i 에 대한 대안을 참조하세요.

git reset --soft HEAD^

먼저 로컬 저장소에서 커밋을 제거합니다. git rebase -i 사용하여 이 작업을 수행할 수 있습니다. 예를 들어, 마지막 커밋이라면 git rebase -i HEAD~2 하고 팝업되는 편집기 창에서 두 번째 줄을 삭제할 수 있습니다.

git push origin +branchName --force 사용하여 GitHub로 강제 푸시합니다.

자세한 내용은 Git Magic Chapter 5: Lessons of History - And then Some 을 참조하십시오(예: 오래된 커밋을 제거하려는 경우).

아, 작업 트리가 더러우면 먼저 git stash git stash apply 합니다.


Can Berk Güder

git push -f origin HEAD^:master

푸시를 "실행 취소"해야 합니다.


Dustin

실수인 경우 쉽게 되돌릴 수 있도록(아마도 저장소를 분기한 다음 새 저장소 대신 원본 저장소로 푸시한 경우) 여기에 또 다른 가능성이 있습니다.

 git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

분명히 그 숫자를 반환하려는 커밋 번호로 바꾸십시오.

그 이후의 모든 것은 다시 푸시하면 삭제됩니다. 이를 위해 다음 단계는 다음과 같습니다.

 git push --force

CodeWalrus

  1. 되돌리려는 커밋을 찾기 위해 git log

  2. git push origin +7f6d03:master 반면 7f6d03은 잘못 푸시된 커밋 전의 커밋입니다. + force push 위한 것이었습니다.

그리고 그게 다야.

다음 은 귀하의 문제를 쉽고 간단하게 해결하는 아주 좋은 안내서입니다!


kate

삭제 후 커밋 변경 사항을 유지하려는 경우:

제거할 커밋이 마지막으로 커밋된 커밋인 경우 이 솔루션이 작동합니다.


1 - 로그에서 돌아가고 싶은 커밋 참조를 복사합니다.

 git log

2 - git을 커밋 참조로 재설정합니다.

 git reset <commit_ref>

3 - 원격으로 푸시한 후 나중에 사용할 잘못된 커밋의 로컬 변경 사항을 숨기거나 저장합니다.

 git stash

4 - 변경 사항을 원격 저장소로 푸시합니다(-f 또는 --force):

 git push -f

5 - 저장된 변경 사항을 로컬 저장소로 되돌립니다.

 git stash apply

7 - 변경 사항에 추적되지 않은/새 파일이 있는 경우 커밋하기 전에 git에 추가해야 합니다.

 git add .

6 - 필요한 추가 변경 사항을 추가한 다음 필요한 파일을 커밋합니다(또는 각 파일 이름을 지정하는 대신 점 '.'을 사용하여 로컬 저장소의 모든 파일을 커밋합니다.

 git commit -m "<new_commit_message>" <file1> <file2> ...

또는

 git commit -m "<new_commit_message>" .

Loukan ElKadi

캐시를 완전히 지우려면 캐시를 지워야 합니다. git의 이 도움말 페이지가 도움이 될 것입니다. (그것은 나를 도왔다) http://help.github.com/remove-sensitive-data/


subutux

수행한 작업을 유지하면서 가장 최근 커밋을 삭제합니다.

 git reset --soft HEAD~1

가장 최근 커밋을 삭제하여 수행한 작업을 파괴합니다.

 git reset --hard HEAD~1

Ekambaram E

1. git reset HEAD^ --hard 2. git push origin -f

이것은 나를 위해 일합니다.


Hilen

푸시를 git revert 를 사용하십시오.

git-revert - 일부 기존 커밋 되돌리기

 git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>... git revert --continue git revert --quit git revert --abort

관련 패치가 도입한 변경 사항을 되돌리고 이를 기록하는 몇 가지 새로운 커밋을 기록합니다. 이를 위해서는 작업 트리가 깨끗해야 합니다(HEAD 커밋에서 수정 사항 없음).

참고 : git revert 는 일부 새로운 커밋을 기록하여 이전 커밋(종종 결함이 있는 커밋만)의 효과를 되돌리는 데 사용됩니다. 작업 디렉토리에서 커밋되지 않은 모든 변경 사항을 버리고 싶다면 git-reset 특히 --hard 옵션이 표시되어야 합니다.


Jyoti Prakash

원격 저장소에서 커밋을 삭제하려면:

 git push -f origin last_known_good_commit:branch_name

로컬 저장소에서 커밋을 삭제하려면:

 git reset --hard HEAD~1

링크


george mano

되돌리려는 커밋의 커밋 해시를 알아야 합니다. https://github.com/your-organization/your-project/commits/master 와 같은 GitHub URL에서 가져올 수 있습니다.

커밋의 해시(돌아가고 싶은 위치)가 "99fb454"(긴 버전 "99fb45413eb9ca4b3063e07b40402b136a8cf264")라고 가정하면 다음과 같이 하면 됩니다.

 git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264 git push --force

Benny Neugebauer

Github에서 분기의 헤드가 되고 싶은 커밋의 참조 사양을 찾고 다음 명령을 사용합니다.

git push origin +[ref]:[branchName]

귀하의 경우 한 커밋으로 돌아가려면 해당 커밋에 대한 ref의 시작 부분을 찾으십시오. 예를 들어 7f6d03이라고 가정하고 변경하려는 분기의 이름을 예를 들어 마스터라고 가정하십시오. 다음을 수행하십시오.

git push origin +7f6d03:master

더하기 문자는 --force 로 해석되며, 이는 기록을 다시 작성하기 때문에 필요합니다.

--force 커밋할 때마다 브랜치를 병합한 다른 사람의 기록을 잠재적으로 다시 쓸 수 있습니다. 그러나 다른 사람이 분기를 병합하기 전에 빠르게 문제를 파악하면 문제가 발생하지 않습니다.


orb

커밋에 민감한 데이터가 있기 때문에 이 작업을 수행하는 경우 여기에서 다른 답변을 사용하는 것은 안전하지 않습니다 (내가 확장할 subutux 제외).

이에 대한 github 가이드 는 외부 도구 사용을 권장하지만 내장 도구를 사용하는 것을 선호합니다.

먼저 저장소를 백업하십시오 . 그 다음에:

 git filter-branch --force --index-filter \ 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \ --prune-empty --tag-name-filter cat -- --all

그런 다음 저장소가 원하는 상태인지 확인하십시오 . 백업과 비교하고 싶을 수도 있습니다.

정확하다고 확신하는 경우 다음을 수행합니다.

 #get rid of old unreferenced commits (including the data you want to remove) git gc --prune=now git push origin --force --all

만일을 대비하여 잠시 동안 로컬 백업을 유지하고 싶을 수도 있습니다.


loopbackbee

터미널에서 이 명령을 실행합니다.

 git reset HEAD~n

로컬 저장소(예: HEAD~2)에서 마지막 n개의 커밋을 제거할 수 있습니다. 저장소에서 강제 git push를 진행합니다.

 git push -f origin <branch>

도움이 되었기를 바랍니다!


Kent Aguilar

분기 및 병합 구조를 유지하려면 리베이스를 수행할 때 --preserve-merges

 git rebase --preserve-merges -i HEAD^^

Carlos Mafla

GitHub의 경우

  • 로컬 저장소에서 커밋(HARD) 재설정
  • 새 분기 만들기
  • 새 분기 푸시
  • OLD 브랜치 삭제(마스터 브랜치를 삭제하는 경우 새 브랜치를 기본 브랜치로 설정)

M_R_K

로컬 변경 사항을 먼저 측면 어딘가에 저장하십시오 ( 백업 )

최근 커밋을 검색한 다음 "전체 SHA 복사" 버튼을 클릭하여 커밋 해시를 선택하여 클립보드로 보낼 수 있습니다.

마지막 커밋 해시가 g0834hg304gh3084gh(예: )라고 가정해 보겠습니다.

다음을 실행해야 합니다.

git push origin +g0834hg304gh3084gh:master

이전에 복사한 해시를 사용하여 "HEAD" 개정판으로 만듭니다.

원하는 로컬 변경 사항을 추가합니다. 완료 ;)


Деян Добромиров

대화형 리베이스를 제거하려면

git rebase -i HEAD~4

4는 커밋을 표시하고 그에 따라 변경하는 4 represents total number of commits to display count your commit and

목록에서 원하는 커밋을 삭제하십시오 ...

Ctrl+X(ubuntu) 또는 :wq(centos)로 변경 사항 저장

두 번째 방법, 되돌리기,

 git revert 29f4a2 #your commit ID

이것은 특정 커밋을 되돌릴 것입니다


Mohideen bin Mohammed

GitHub Desktop 에서 커밋을 마우스 오른쪽 버튼으로 클릭하고 되돌릴 수 있습니다. 그러면 변경 사항을 취소하는 새 커밋이 생성됩니다.

실수로 커밋한 것은 여전히 기록에 남지만(예를 들어 실수로 API 키나 비밀번호를 커밋한 경우 문제가 될 수 있음) 코드는 되돌려집니다.

이것은 가장 간단하고 쉬운 옵션이며 허용되는 답변이 더 포괄적입니다.


Keith

역사를 다시 쓰는 것은 좋지 않습니다. git revert <commit_id> 를 사용하면 해당 커밋 ID의 깨끗한 역 커밋이 생성됩니다.

이렇게 하면 역사가 다시 쓰여지지 않고 모든 사람이 되돌려졌다는 것을 알 수 있습니다.


vivek_ganesan

원하는 방식으로 파일을 추가/제거하세요.

 git rm classdir git add sourcedir

그런 다음 커밋을 수정합니다.

 git commit --amend

이전의 잘못된 커밋은 새 인덱스 상태를 반영하도록 편집됩니다. 즉, 처음부터 실수를 한 적이 없는 것과 같습니다.

아직 푸시하지 않은 경우에만 이 작업을 수행해야 합니다. 푸시한 경우 정상적으로 수정 사항을 커밋하면 됩니다.


Chiragkumar Thakar

출처 : http:www.stackoverflow.com/questions/448919/how-can-i-remove-a-commit-on-github

반응형