programing

'git push' 실행 취소

easyjava 2023. 4. 9. 22:30
반응형

'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에서 마지막 커밋이 삭제됩니다.

또 다른 방법은 다음과 같습니다.

  1. 다른 브랜치를 작성하다
  2. 그 브랜치의 이전 커밋을 체크 아웃하기 위해 "commit checkout"을 사용합니다.
  3. 새 지점을 누르다
  4. 오래된 브랜치를 삭제하고 삭제를 푸시합니다(사용).git push origin --delete <branch_name>)
  5. 새 지점의 이름을 오래된 지점으로 변경하다
  6. 다시 밀다.

시나리오 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단,

  1. 커밋을 로컬로 유지하거나 커밋되지 않은 변경을 유지하려는 경우
  2. 지금 얼마나 많은 커밋을 눌렀는지 모르잖아

변경을 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

또는 다른 방법으로

  1. 푸시를 재설정하려면:git reset --soft HEAD^1

  2. modify file이 표시되므로 리셋합니다.git reset <files>

  3. git --commit --commit

  4. 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

반응형