'git push' 실행 취소
이게 내가 안정적이어야 할 나뭇가지에 한 일인데...
% git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded alpha-0.3.0 to master.
% git status
# On branch alpha-0.3.0
# Your branch is ahead of 'origin/alpha-0.3.0' by 53 commits.
#
nothing to commit (working directory clean)
% git push
Fetching remote heads...
refs/
refs/heads/
refs/tags/
refs/remotes/
'refs/heads/master': up-to-date
updating 'refs/heads/alpha-0.3.0'
from cc4b63bebb6e6dd04407f8788938244b78c50285
to 83c9191dea88d146400853af5eb7555f252001b0
done
'refs/heads/unstable': up-to-date
Updating remote server info
그것은 모두 실수였다는 것을 나중에 깨달았습니다.이 모든 과정을 취소하고 알파 0.3.0 브랜치를 원래대로 되돌리고 싶습니다.
어떻게 해야 하나?
이력을 되감으려고 하므로 이 저장소의 다른 사용자가 잘못된 변경을 가져오거나 삭제할 커밋 위에 빌드하려고 하지 않도록 해야 합니다.
그런 다음 이전 참조를 '강제' 푸시해야 합니다.
git push -f origin last_known_good_commit:branch_name
또는 고객님의 경우
git push -f origin cc4b63bebb6:alpha-0.3.0
가지고 수 있다receive.denyNonFastForwards이치노 '가 나오는데, '오류'는 '오류'가 예요.[remote rejected].
이 시나리오에서는 브런치를 삭제하고 다시 작성해야 합니다.
git push origin :alpha-0.3.0
git push origin cc4b63bebb6:refs/heads/alpha-0.3.0
- '-'가 일 것입니다.receive.denyDeletes이 경우 저장소에 직접 액세스할 수 있어야 합니다.원격 저장소에서 다음 배관 명령과 같은 작업을 수행해야 합니다.
git update-ref refs/heads/alpha-0.3.0 cc4b63bebb6 83c9191dea8
이것도 할 수 있다고 생각합니다.
git checkout alpha-0.3.0
git reset --hard cc4b63bebb6
git push origin +alpha-0.3.0
이것은 마지막 방법과 매우 유사하지만 리모트 레포에서 빈둥거릴 필요가 없습니다.
git revert을 하다
prompt> git revert 35f6af6f77f116ef922e3d75bc80a4a466f92650
[master 71738a9] Revert "Issue #482 - Fixed bug."
4 files changed, 30 insertions(+), 42 deletions(-)
prompt> git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
prompt>
35f6af6f77f116ef922e3d75bc80a4a466f92650을 커밋으로 바꿉니다.
원하는 변경을 잃지 않고 실행할 수 있는 방법:
git reset cc4b63b
git stash
git push -f origin alpha-0.3.0
git stash pop
그런 다음 푸시하려는 파일을 선택할 수 있습니다.
(@charles bailey에서) 공유 레포에서 작업하는 경우 허용되는 솔루션은 매우 위험합니다.
베스트 프랙티스로서 공유되는 리모트리포에 푸시되는 모든 커밋은 '불변의' 것으로 간주해야 합니다.대신 http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#fixing-mistakes 를 사용합니다.
https://git-scm.com/book/be/v2/Git-Basics-Undoing-Things
git push origin +7f6d03:master
이렇게 하면 지정된 커밋 번호로 리포됩니다.
git reset --hard HEAD^
git push origin -f
그러면 로컬 디바이스 및 Github에서 마지막 커밋이 삭제됩니다.
또 다른 방법은 다음과 같습니다.
- 다른 브랜치를 작성하다
- 그 브랜치의 이전 커밋을 체크 아웃하기 위해 "commit checkout"을 사용합니다.
- 새 지점을 누르다
- 오래된 브랜치를 삭제하고 삭제를 푸시합니다(사용).
git push origin --delete <branch_name>) - 새 지점의 이름을 오래된 지점으로 변경하다
- 다시 밀다.
시나리오 1: 마지막 커밋 8123b7e04b3을 취소하려면 다음 명령을 사용합니다(이 명령어는 나에게 유효합니다).
git push origin +8123b7e04b3^:<branch_name>
출력은 다음과 같습니다.
Total 0 (delta 0), reused 0 (delta 0)
To https://testlocation/code.git
+ 8123b7e...92bc500 8123b7e04b3^ -> master (forced update)
주의: 로컬 코드의 변경을 갱신하려면(커밋을 로컬에서도 삭제합니다).
$ git reset --hard origin/<branchName>
Message displayed is : HEAD is now at 8a3902a comments_entered_for_commit
추가 정보: 시나리오 2: 경우에 따라서는 이전 명령어를 사용하여 방금 실행 취소한 것을 되돌리고(기본적으로 실행 취소) 다음 명령을 사용할 수 있습니다.
git reset --hard 8123b7e04b3
git push
출력:
HEAD is now at cc6206c Comment_that_was_entered_for_commit
자세한 내용은 이쪽:https://github.com/blog/2019-how-to-undo-almost-anything-with-git
여러 커밋 실행 취소git reset --hard 0ad5a7a6(커밋 SHA1 해시만 제공)
마지막 커밋 실행 취소
git reset --hard HEAD~1(마지막 커밋에 대한 변경은 삭제됩니다)git reset --soft HEAD~1(지난번 커밋에 대한 변경은 커밋되지 않은 로컬 수정으로 사용할 수 있습니다.)
reset 명령어를 사용할 수 있습니다.
git reset --soft HEAD^1
그 후, 다음과 같이 합니다.
git reset <files>
git commit --amend
그리고.
git push -f
기존 답변은 올바르고 양호합니다. 단, 이 답변의 실행을 취소해야 합니다.push단,
- 커밋을 로컬로 유지하거나 커밋되지 않은 변경을 유지하려는 경우
- 지금 얼마나 많은 커밋을 눌렀는지 모르잖아
변경을 ref로 되돌리려면 다음 명령을 사용합니다.
git push -f origin refs/remotes/origin/<branch>@{1}:<branch>
푸시를 되돌리려면
git reset --hard HEAD@{1}
git push -f
git reset --hard HEAD@{1}
이제 로컬이 리모트보다 앞서게 됩니다.
git reset --hard origin/master
또는 다른 방법으로
푸시를 재설정하려면:
git reset --soft HEAD^1modify file이 표시되므로 리셋합니다.
git reset <files>git --commit --commit
git 푸시 -f
저도 같은 문제가 있었어요.되돌리고 싶은 마지막 커밋 ID(af12de...)를 복사하기만 하면 됩니다.그런 다음 이 명령을 실행합니다.git revert af12de...그러면 변경 내용을 에 푸시합니다.master이건 나에게 효과가 있었다.
리모트 브랜치에서 방금 푸시한 마지막 커밋을 무시하는 경우: 커밋은 삭제되지 않고,git pointer에 의해 언급되어 있는 이전 커밋에 의해 언급되다HEAD^또는HEAD^1
git push origin +HEAD^:branch
그러나 이미 이 커밋을 푸시하고 다른 사용자가 브랜치를 풀한 경우.이 경우 지점 이력을 다시 쓰는 것은 바람직하지 않습니다.대신 이 기록을 되돌려야 합니다.commit:
git revert <SHA-1>
git push origin branch
언급URL : https://stackoverflow.com/questions/1270514/undoing-a-git-push
'programing' 카테고리의 다른 글
| TABLOCK vs TAB록X (0) | 2023.04.09 |
|---|---|
| 응용 프로그램 실행 종료 시 루트 뷰 컨트롤러가 있어야 함 (0) | 2023.04.09 |
| 프로젝트 빌드 시 코코아팟 오류 (0) | 2023.04.09 |
| 루비, 문자열에서 마지막 N자를 제거하시겠습니까? (0) | 2023.04.09 |
| Active Workbook까지 기다립니다.Refresh All 완료(VBA) (0) | 2023.04.09 |