git를 사용하여 푸시된 커밋을 취소하려면 어떻게 해야 합니까?
원격 저장소에 로컬 저장소(개발) 및 서버 1(prod)과 동기화된 프로젝트가 있습니다.이미 원격으로 푸시되어 서버에서 가져온 변경 사항을 커밋했습니다.이제 이러한 변경 사항을 취소합니다. 그냥 그서저그냥는래▁just.git checkout
변경하기 전에 커밋하고 새 변경 사항을 커밋합니다. 하지만 원격으로 다시 푸시하는 데 문제가 있을 것 같습니다.제가 어떻게 진행해야 하는지에 대한 제안이 있습니까?
다음을 사용하여 개별 커밋을 되돌릴 수 있습니다.
git revert <commit_hash>
지정한 커밋의 변경 내용을 되돌리는 새 커밋이 만들어집니다.특정 커밋만 반환하고 이후 커밋은 반환하지 않습니다.커밋 범위를 되돌리려면 다음과 같이 수행할 수 있습니다.
git revert <oldest_commit_hash>..<latest_commit_hash>
다음 이후의 모든 커밋을 반환합니다.<oldest_commit_hash>
까지 <latest_commit_hash>
Git의 일부 버전에서는 또한 다음을 되돌립니다.<oldest_commit_hash>
그래서 그 커밋이 되돌리는지 다시 확인합니다.커밋(커밋을 은할 수 .g reset --hard HEAD~
.
사할수있커해확시면인려를 사용할 수 git log
.
Git-revert man 페이지에서 더 많은 정보를 확인하십시오.git revert
지휘권또한 커밋을 되돌리는 방법에 대한 자세한 내용은 이 답변을 참조하십시오.
실행 취소의 흔적을 남기지 않는 솔루션.
참고: 다른 사용자가 이미 거스름돈을 인출한 경우에는 이 작업을 수행하지 마십시오(개인 보관소에서만 사용합니다).
실행:
git reset <previous label or sha1>
그러면 모든 업데이트가 로컬로 다시 표시됩니다(Sogit 상태에 모든 업데이트된 파일이 나열됨).
그런 다음 "작업을 수행"하고 변경 사항을 다시 커밋합니다(참고: 이 단계는 선택 사항입니다).
git commit -am "blabla"
현재 로컬 트리가 원격 트리와 다릅니다.
git push -f <remote-name> <branch-name>
원격 분기가 강제로 이 푸시를 수행하고 이전 항목을 제거합니다(remote-name 및 branch-name 지정은 필수 사항은 아니지만 업데이트 플래그로 모든 분기를 업데이트하지 않는 것이 좋습니다).
주의 일부 태그는 여전히 제거된 커밋을 가리키고 있을 수 있습니다!!원격 태그 삭제 방법
이 경우 제가 수행하는 작업은 다음과 같습니다.
서버에서 마지막으로 확인된 정상 커밋으로 커서를 다시 이동합니다.
git push -f origin <last_known_good_commit>:<branch_name>
로컬에서 동일한 작업을 수행합니다.
git reset --hard <last_known_good_commit> # ^^^^^^ # optional
에 my_new_branch
목적으로 것: 목 적 위 만 든 것 해 을 이 것 ▁that
$ git branch
my_new_branch
은 이은몇가추후최기다니록입근의가에 몇 가지를 입니다.myfile.py
:
$ git log
commit 80143bcaaca77963a47c211a9cbe664d5448d546
Author: me
Date: Wed Mar 23 12:48:03 2016 +0100
Adding new stuff in myfile.py
commit b4zad078237fa48746a4feb6517fa409f6bf238e
Author: me
Date: Tue Mar 18 12:46:59 2016 +0100
Initial commit
이미 푸시된 마지막 커밋을 제거하고 싶어서 실행합니다.
$ git push -f origin b4zad078237fa48746a4feb6517fa409f6bf238e:my_new_branch
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:me/myrepo.git
+ 80143bc...b4zad07 b4zad078237fa48746a4feb6517fa409f6bf238e -> my_new_branch (forced update)
좋아요! 이제 그 커밋에서 변경된 파일이 보여요 (myfile.py
는 " commit "commit"에 표시됩니다.
$ git status
On branch my_new_branch
Your branch is up-to-date with 'origin/my_new_branch'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: myfile.py
no changes added to commit (use "git add" and/or "git commit -a")
이러한 변경을 원하지 않기 때문에 커서를 로컬로 다시 이동합니다.
$ git reset --hard b4zad078237fa48746a4feb6517fa409f6bf238e
HEAD is now at b4zad07 Initial commit
이제 HEAD는 로컬 및 원격 모두에서 이전 커밋에 있습니다.
$ git log
commit b4zad078237fa48746a4feb6517fa409f6bf238e
Author: me
Date: Tue Mar 18 12:46:59 2016 +0100
Initial commit
푸시된 커밋이 제거됩니다.
git reset --hard 'xxxxx'
git clean -f -d
git push -f
만일의 경우를 대비하여 백업을 만듭니다.
댓글에서 두 개의 메모가 튀어나왔습니다.
'xxxxx'
유지하려는 마지막 커밋의 해시 코드입니다.clean
관리가 파일을합니다!버전 제어가 아닌 파일을 제거합니다!
git 명령줄을 통해 아래와 같은 단계에 따라 Git Commit BOTH 로컬 및 원격으로 Git Commit(Git 커밋)을 되돌릴 수 있습니다(또는 DELETE라고도 할 수 있습니다.
다음 명령을 실행하여 되돌리려는 커밋 ID를 확인합니다.
git log --oneline --decorate --graph
당신은 다음 스크린샷처럼 될 것입니다.
(웹 인터페이스를 통해) 원격도 선택하면 아래와 같은 것을 확인할 수 있습니다.
현재 스크린샷에 따르면 귀하는 커밋 ID110322에 있지만 로컬 및 원격 모두에서 030bbf6으로 되돌리려고 합니다.
로컬에서+원격으로 커밋을 삭제/반환하려면 다음 단계를 수행합니다.
처음 로컬에서 커밋 ID 030bbf6으로 되돌리기
git reset --hard 030bbf6
다음에
git clean -f -d
이 두 명령은 아래 스냅샷에 표시된 것처럼 030bbf6 단계로 강제 재설정됩니다.
이제 git 상태를 실행하면 아래와 같이 원격 분기에서 두 개의 커밋이 뒤에 있음을 알 수 있습니다.
인덱스를 업데이트하려면 다음을 실행합니다(업데이트가 있는 경우).모든 개발자에게 주 원격 분기에서 꺼내기 요청을 수락하지 않도록 요청하는 것이 좋습니다.
git fetch --all
작업을 마치면 아래와 같이 분기 앞에 + 기호를 사용하여 이 커밋을 강제로 푸시해야 합니다.여기를 마스터 브랜치로 사용했습니다. 아무 것이나 사용할 수 있습니다.
git push -u origin +master
이제 원격의 웹 인터페이스가 보이면 커밋도 되돌려야 합니다.
61234
유지하려는 마지막 양호한 커밋의 샤 번호입니다.
git reset --hard 61234
git push -f
추적 없이 모든 잘못된 커밋을 완전히 제거합니다.
참고: (재설정한 커밋을) 사용할 특정 분기로 푸시하려면git push -f origin branch-name
대신.
2020 간단한 방법:
git reset <commit_hash>
(유지할 마지막 커밋의 해시).
현재 커밋되지 않은 변경사항을 로컬로 유지합니다.
다시 푸시하려면 다음 작업을 수행해야 합니다.
git push -f
git revert HEAD -m 1
위의 코드 라인에서."마지막 인수는 다음을 나타냅니다."
1-자신의 커밋을 되돌립니다.
2 - 마지막 두 커밋을 되돌립니다.
n - 마지막 n개의 커밋을 되돌립니다.
원격에 영향을 미치려면 이 명령 뒤에 를 눌러야 합니다.되돌릴 커밋 범위 지정과 같은 다른 옵션도 있습니다.이것은 옵션 중 하나입니다.
나중에 사용git commit -am "COMMIT_MESSAGE"
그리고나서git push
또는git push -f
제 방법은 다음과 같습니다.
지점 이름을 다음과 같이 가정합니다.develop
.
# Checkout a new temp branch based on one history commit
# (command to get history commit hashes: git log --oneline)
git checkout <last_known_good_commit_hash>
# Delete the original develop branch
git branch -D develop
# Create a new develop branch based on the temp branch
git checkout -b develop
# Force update the remote with the new branch
git push -f origin develop
재설정 작업은 저에게 매우 효과적이었습니다.@MoD Genensis 및 @vibs 2006에 감사드립니다.
git reset --hard 'your last working commit hash'
git clean -f -d
git push -f
git reset <commit_hash>
(<commit_commit>를 가져오려면 git log --oneline을 사용합니다.)
git restore .
변경된 모든 파일을 대상 커밋의 버전으로 복원합니다.
git push origin master --force
원격 마스터 분기에 강제로 푸시합니다.그러나 같은 지점에서 함께 작업하는 사람이 있는 경우에는 강제 푸시를 사용할 때 주의해야 합니다.
깨끗하게 하는 방법:
git rebase -i <hash of last good commit, 9 chars is enough>
이제 마지막 양호한 커밋부터 다음 커밋까지의 커밋 목록을 얻을 수 있습니다.HEAD
각 커밋에 대해 수행할 작업 옵션이 있습니다. DROP
그 약속을 버릴 겁니다파일을 저장합니다.
이제 업스트림을 수정하려면 다음을 수행합니다.
git push --force-with-lease
(누른 업데이트 작업을 하는 다른 사람에게 실수로 문제를 일으키지 않도록 임대)
이렇게 하면 이전의 잘못된 커밋을 수정하는 새로운 커밋을 도입하는 대신 잘못된 커밋을 제거하여 로그를 깨끗하게 유지할 수 있습니다.
당신은 다음과 같은 것을 할 수 있습니다.
git push origin +<short_commit_sha>^:<branch_name>
되돌리지 않고 이 작업을 수행하는 다른 방법(실행 취소 흔적):
다른 사용자가 다른 커밋을 푸시한 경우 수행 안 함
분기에 있는 분기의 백업을 만듭니다.my-branch
따라서 문제가 발생할 경우 작업 손실 없이 프로세스를 다시 시작할 수 있습니다.
git checkout -b my-branch-temp
지점으로 돌아가십시오.
git checkout my-branch
재설정, 마지막 커밋을 취소하려면(실행 취소):
git reset --hard HEAD^
원격에서 분기를 제거합니다(예: origin
원격).
git push origin :my-branch
원하지 않는 커밋 없이 원격으로 분기를 다시 누릅니다.
git push origin my-branch
알았어!
그게 도움이 되길 바랍니다!;)
언급URL : https://stackoverflow.com/questions/22682870/how-can-i-undo-pushed-commits-using-git
'programing' 카테고리의 다른 글
목표 C에서 강한 것과 약한 것의 차이 (0) | 2023.04.26 |
---|---|
로컬 Git 변경을 제거하는 다양한 방법 (0) | 2023.04.26 |
Swift에서 "신고되지 않은 유형의 사용", 유형이 내부이고 동일한 모듈에 존재하는 경우 (0) | 2023.04.26 |
언제-만약 vs. ng-show/ng-hide를 선호해야 합니까? (0) | 2023.04.26 |
단일 Excel 셀 값을 읽는 방법 (0) | 2023.04.26 |