source

git push 후 로컬 및 원격에서 git commit을 실행 취소하려면 어떻게 해야 합니까?

ittop 2023. 5. 27. 11:59
반응형

git push 후 로컬 및 원격에서 git commit을 실행 취소하려면 어떻게 해야 합니까?

나는 공연을 했습니다.git commit다음에git push로컬 및 원격 저장소에서 변경 내용을 되돌리는 방법은 무엇입니까?

$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael Silver@gmail.com>
Date:   Tue Jun 11 12:24:23 2011 -0700
git reset --hard HEAD~1
git push -f <remote> <branch>

(예: 푸시: git push -f origin bugfix/bug123)

이렇게 하면 마지막 커밋이 실행 취소되고 업데이트된 기록이 원격으로 푸시됩니다.당신은 통과해야 합니다.-f왜냐하면 당신은 리모트의 업스트림 히스토리를 대체하고 있기 때문입니다.

편집:

참고로--hard커밋에 도달할 수 없게 됩니다(즉, 삭제된 것처럼 보이지만 그래도 됩니다).git show <hash>또는git log <hash>해시를 기억하는 경우).변경 내용을 유지하려면 다음을 실행합니다.

git reset [--mixed] HEAD~1

이 시점에서 사용했기 때문에 단계별 변경 사항이 있습니다.--mixed기본값입니다.

먼저 원격 트리를 업데이트할 수 있습니다(즉, 커밋 제거). git push -f <remote> <branch>

변경사항이 로컬에 남아 있으므로 다른 분기를 생성하여commit그곳에 있는 그들(그리고)push적당하다고 생각되는 대로).

일반적으로 다음을 사용하여 "역" 커밋을 수행합니다.

git revert 364705c

그런 다음 평소처럼 원격으로 전송합니다.

git push

이렇게 하면 커밋이 삭제되지 않습니다. 첫 번째 커밋이 수행한 작업을 취소하는 추가 커밋이 만들어집니다.특히 변경사항이 이미 전파되었을 때, 실제로 안전하지 않은 다른 모든 것.

우선, 긴장을 푸세요.

"어떤 것도 우리의 통제하에 있지 않습니다.우리의 통제는 환상에 불과합니다." "오류는 인간입니다."

당신이 의도치 않게 코드를 밀어넣었다는 것을 이해합니다.remote-master이것은 괜찮을 것입니다.

처음에는, 다음과 같은 것을 얻으십시오.SHA-1반환하려는 커밋 값(예: 마스터 분기에 커밋). 다음을 실행합니다.

git log

각 커밋과 함께 문자열과 같은 'f650a9e398ad9ca606b25513bd4af9fe...'가 표시됩니다.반환할 커밋에서 해당 번호를 복사합니다.

이제 아래 명령을 입력합니다.

git reset --hard your_that_copied_string_but_without_quote_mark

"HEAD is now."와 같은 메시지가 표시되어야 합니다. 당신은 안전합니다.그것이 방금 한 것은 지역적으로 그 변화를 반영하는 것입니다.

이제 아래 명령을 입력합니다.

git push -f

당신은 다음과 같이 봐야 합니다.

"경고: push.default는 설정되지 않았습니다. 암시적 값이 변경되었습니다...총 0(델타 0), 재사용된 0(델타 0) ... your_branch_name -> 마스터(강제 업데이트)"

이제, 당신들은 모두 안전합니다."git log"로 마스터를 다시 확인하십시오. fixed_destination_commit이 목록의 맨 위에 있어야 합니다.

천만에요 (미리 ; )

업데이트:

이제, 이 모든 것이 시작되기 전에 당신이 했던 변화는 이제 사라졌습니다.만약 당신이 그 힘든 일들을 다시 되돌리고 싶다면, 가능합니다.git refloggit cherry-pick 명령 덕분입니다.

이를 위해 이 블로그나 이 게시물팔로우 해주시기 바랍니다.

git reset HEAD~1변경사항을 삭제하지 않으려면(변경사항을 분류하지 않음). 밀어넣기 변경, 커밋다푸git push -f [origin] [branch]

사용해 보십시오.

git reset --hard <commit id> 

참고: 여기서 commit id는 사용자가 이동할 커밋의 id가 되지만 재설정할 id는 아닙니다.이것이 저도 막히게 된 유일한 지점이었습니다.

그다음에 밀어요

git push -f <remote> <branch>

대화형 기본 재배치를 수행할 수 있습니다.

git rebase -i <commit>

기본 편집기가 나타납니다.삭제할 커밋이 포함된 줄을 삭제하여 해당 커밋을 삭제합니다.

물론 이 변경 사항을 적용하려면 원격 저장소에도 액세스해야 합니다.

다음 질문을 참조하십시오.Git: 리포지토리에서 선택한 커밋 제거

또는 다음과 같습니다.

git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

오리진 원격 저장소의 마스터 분기를 마지막 커밋의 상위 항목으로 강제 적용

용사를 합니다.git reset --hard HEAD~1대부분의 경우 로컬에서 마지막 커밋을 실행 취소하지만 로컬 변경 내용도 손실됩니다.

로컬 변경 내용을 손실하지 않고 마지막 커밋을 실행 취소하려면 다음을 수행합니다.

git reset HEAD~1

원점으로 을 실행 합니다(예:<remote> == origin)

git push -f origin <branch>

언급URL : https://stackoverflow.com/questions/6459080/how-can-i-undo-a-git-commit-locally-and-on-a-remote-after-git-push

반응형