로컬 및 원격 Git 저장소를 1커밋만큼 롤백하는 중
저는 이 주제에 대한 비슷한 게시물을 읽었는데, 어떻게 하면 이것을 제대로 할 수 있을지 아무리 생각해도 모르겠습니다.
저는 제가 원하지 않는 약 1000개의 파일을 체크인했고, 저는 그것들을 하나씩 겪지 않고 레포에서 모두 제거하는 것이 더 낫습니다.
- 원격 지사가 있습니다.
- 지역 지부가 있습니다.
그들은 둘 다 같은 개정판에 있습니다.
리모컨을 1 커밋만큼 롤백하고 싶습니다.
에서 내 .master
이라A--B--C--D--E
.
을 로을다롤백합다니로로 .D
.
그런 다음 원격으로 푸시하여 현재 해시가 원격 및 로컬 모두 D가 되도록 합니다.
저는 이것을 하는 데 어려움을 겪고 있습니다.
나는 깃 타워를 사용하고 있지만 명령줄에 익숙합니다.도와드릴까요?
업데이트: 아래에 좋은 의견이 있습니다.특히 리포지토리를 다른 사용자와 공유하는 경우에는 재설정을 사용하는 것이 일부 권장되지 않는 것 같습니다.하드 리셋을 사용하지 않고 이전 커밋의 변경 내용을 취소하는 가장 좋은 방법은 무엇입니까?방법이 있습니까?
아직 아무도 원격 보고서를 가져오지 않은 경우, 분기 HEAD를 변경하여 해당 원격 보고서에 강제로 푸시할 수 있습니다.
git reset --hard HEAD^
git push -f
(또는 원격 repo에 직접 액세스할 수 있는 경우 기본 repo인 경우에도 HEAD 참조를 변경할 수 있습니다.
참고: 아래 댓글에서 외계인 기술이 언급한 바와 같이 Windows(CMD 세션)에서는 다음이 필요합니다.^^
:
git reset --hard HEAD^^
git push -f
그리고? Jon Schneider의 논평에 언급된 바와 같이:
" 령어가인 " 사용하는
HEAD^
으로 의결과가 됩니다.error no matches found: HEAD^
"git show HEAD^
가 작동하지 않는 것 같습니다. 이게 정상입니까?"
: 2011년 버전:
Git 1.8.5와 함께 2013년에 소개된 (여기서 소개)를 사용하는 것이 더 안전합니다.
만약 누군가가 이미 레포를 철회했다면요?그럼 제가 뭘 하겠어요?
그렇다면 저는 역사를 다시 쓰지 않는 것을 제안하고 싶습니다.
git revert
로컬에서 마지막 커밋(이전 커밋이 수행한 것을 뒤집는 새 커밋 만들기)- '립을'가 내는 'revert.
git revert
.
("Regision").HEAD^
하나의 리비전 백을 의미합니다):
git reset --hard HEAD^
변경 내용을 오리진으로 푸시:
git push --force
그렇지 않으면 Git이 당신이 뒤쳐져 있다는 것을 인식할 것이기 때문에 당신은 억지로 밀어붙여야 할 것입니다.origin
한 번의 약속으로 아무것도 변하지 않을 것입니다.
로 --force
에게 덮쓸어알려니다줍을다▁overwrite▁g를 덮어쓰라고 .HEAD
그곳의 진보를 존중하지 않고 멀리 떨어진 레포에서.
마지막 커밋을 되돌리려면 수신 대기:
1단계:
메시지로 로컬 커밋 확인
$ git log
2단계:
로컬 분기(또는 마스터)에서 변경 내용을 재설정하지 않고 마지막 커밋 제거
$ git reset HEAD^
또는 마지막 커밋 파일 및 업데이트 수신을 원하지 않는 경우
$ git reset HEAD^ --hard
3단계:
우리는 파일과 코드를 업데이트할 수 있으며 다시 강제로 눌러 이전 커밋을 삭제해야 합니다.새로운 커밋을 유지합니다.
$ git push origin branch -f
바로 그거야!
아래 명령을 입력하면 Git Commit 내역을 볼 수 있습니다.
깃 로그
특정 분기에 대한 기록이 commit_A, commit_B, commit_C, commit_D와 같다고 가정해 보겠습니다.여기서 commit_D는 마지막 커밋이며 HEAD는 여기에 남아 있습니다.로컬 및 원격에서 마지막 커밋을 제거하려면 다음 작업을 수행해야 합니다.
1단계: 로컬에서 마지막 커밋 제거 방법:
git reset --hard HEAD~
커밋 HEAD가 커밋_으로 변경됩니다.c
2단계: 새로운 HEAD 커밋에 대한 변경 사항을 원격으로 푸시
git push origin +HEAD
이 명령은 원격에서 마지막 커밋을 삭제합니다.
추신: 이 명령어는 Mac OS X에서 테스트되었으며 다른 운영 체제에서도 작동해야 합니다(다른 OS에 대해서는 주장하지 않음).
여기 더 안전한 절차의 업데이트된 버전이 있습니다.
git reset --hard HEAD^
git push --force-with-lease
git push -f
원격 리포지토리를 사용자 자신의 변경 사항으로 무분별하게 교체합니다.다른 사용자가 변경사항을 푸시한 경우 변경사항이 손실됩니다. git push --force-with-lease
리포지토리가 예상대로인 경우에만 기본 재배치를 수행합니다.다른 사용자가 이미 푸시한 경우 푸시가 실패합니다.
참고: 유해하다고 간주되는 강제력. git의 이해 - 임대 계약에 따른 강제력.
다음으로 별칭을 지정하는 것이 좋습니다.repush = push --force-with-lease
.
만약 누군가가 이미 레포를 철회했다면요?그럼 제가 뭘 하겠어요?
에게 하고합니다라다니합▁them▁tell.git pull --rebase=merges
에 에.git fetch origin
그리고.git merge origin/master
그것은 그럴거다.git fetch origin
그리고.git rebase -r origin/master
이 이게하로변내다작시성다니됩용이경렇컬면다▁any로 다시 됩니다.master
리베이스된 새운기위에반로 origin/master
.-r
그들이 했을 수도 있는 합병을 보존할 것입니다.
풀링의 기본 동작으로 설정하는 것이 좋습니다.안전하고 다른 사용자의 기본 재배치를 처리하며 불필요한 병합이 줄어듭니다.
[pull]
rebase = merges
**복귀 및 재설정에 대해 매우 짧게 답변 **
당신이 이것을 할 수 있는 많은 방법들이 있습니다.요구 사항에 따라 아래에서 원하는 것을 선택합니다.
커밋을 되돌림으로써:
마지막 커밋에서 변경한 내용을 모두 되돌리려면 되돌린 후 제거될 내용을 파일에 추가해야 합니다.파일에서 무언가를 제거하면 되돌리기 프로세스가 해당 파일을 추가합니다.
마지막 커밋을 되돌릴 수 있습니다.예:
1.git revert HEAD^
2.git push origin <Branch-Name>
또는 해당 커밋의 해시를 사용하여 이전 커밋으로 되돌릴 수 있습니다.예:
1. git revert <HASH>
2.git push origin <Branch-Name>
또는 커밋이 병합 커밋인 경우 다음을 시도할 수 있습니다.
1.git revert -m 1 <HASH> (-m 1 refers to the first parent of two merged branches)
2.git push origin <Branch-Name>
이전 헤드 재설정
이전 커밋을 가리키려면 재설정을 사용합니다. 이 재설정은 로컬 환경이 이전 커밋을 다시 가리킵니다.머리를 이전 커밋으로 재설정하거나 머리를 이전 커밋으로 재설정할 수 있습니다.
마지막 커밋으로 재설정합니다.
1.git reset HEAD^
2.git push -f origin <Branch-name>
이전 커밋으로 재설정:
1.git reset <HASH>
2.git push -f origin <Branch-name>
REBERT와 RESET 사이의 거래:
재설정 작업보다 되돌리기를 선택한 이유는 무엇입니까?커밋 체인을 이미 원격 저장소에 푸시한 경우(다른 사용자가 코드를 풀어서 작업을 시작했을 수 있음) 되돌리기가 변경 사항을 취소하는 더 좋은 방법입니다.이는 Git 워크플로우가 분기 끝에서 추가 커밋을 선택하는 데 잘 작동하지만 누군가 분기 포인터를 다시 재설정할 때 체인에 커밋 집합이 더 이상 표시되지 않으면 어려울 수 있기 때문입니다.
또한 분기를 재설정하면 지금까지 수행한 작업이 파괴될 수 있습니다.커밋을 재설정하면 GIT는 이 커밋 이후에 수행된 커밋을 모두 삭제하기 때문입니다.한 번의 어리석은 실수는 여러분의 모든 힘든 일을 파괴할 수 있고 여러분이 리셋하는 것에 대한 어떤 기록도 남기지 않습니다.반면에 이 시나리오에서는 커밋을 되돌리는 것이 더 나은 옵션입니다.커밋을 되돌리면 GIT는 되돌리려는 커밋과 완전히 반대되는 변경 사항으로 새 커밋을 만듭니다.그리고 그것은 그 가지의 끝을 가리킵니다.그래서 우리의 어리석은 실수에 어떤 것도 망치지 않을 것입니다.
윈도우즈 시스템의 경우 다음을 사용합니다.
git reset HEAD~1 #Remove Commit Locally
다음과 같은 작업도 수행할 수 있습니다.
git reset --hard <commit-hash>
git push -f origin master
최근에 잘못된 커밋을 받은 다른 모든 사용자를 재설정합니다.
git reset --hard origin/master
나는 다음 명령을 통해 당신과 같은 문제를 해결했습니다.
git reset --hard HEAD^
git push -f <remote> <local branch>:<remote branch>
원격 저장소에 직접 액세스할 수 있는 경우 항상 다음을 사용할 수 있습니다.
git reset --soft HEAD^
존재하지 않는 작업 디렉토리를 수정하려는 시도가 없으므로 이 작업이 작동합니다.자세한 내용은 원본 답변을 참조하십시오.
깃베어 저장소에서 마지막 커밋을 해제하려면 어떻게 해야 합니까?
원격의 명확한 커밋 기록에서도 마지막 커밋을 제거하고 싶었습니다.다음은 매력적으로 작동했습니다.
git reset --hard HEAD^
git push -f
헤드를 재설정하고 이전 커밋으로 되돌리는 방법은 다음과 같습니다.
$ git reset HEAD^ --hard
$ git push <branchname> -f
그러나 원격 분기에서 허용되지 않을 수도 있습니다.
To ssh:<git repo>
! [rejected] develop -> develop (non-fast-forward)
error: failed to push some refs to 'ssh:<git repo>'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
그렇다면 다른 방법은.
git revert HEAD
git push <remote branch>
이것은 잘 작동합니다.
참고: 다음의 경우를 기억하십시오.git push -f <force>
실패한 다음 되돌리려고 합니다.도아git pull
이전에는 원격 및 로컬이 동기화되도록 한 다음 시도하십시오.git revert
.
체크 인git log
원격 및 로컬이 동일한 SHA1과 동일한 커밋 지점에 있는지 확인합니다.
git revert
A --> B --> C -->D
A--> B --> C --> D --> ^D(taking out the changes and committing reverted diffs)
그 고장의 주인에게.
git reflog
-- this will list all last commit
e.g Head@{0} -- wrong push
Head@{1} -- correct push
git checkout Head@{1} .
-- this will reset your last modified files
git status
git commit -m "reverted to last best"
git push origin/master
다른 사람이 당겼는지 아닌지 걱정할 필요가 없습니다.
알았어!
로컬 리포지토리를 손상시키지 않고 원격 리포지토리에서 마지막 커밋만 제거하려면 다음과 같은 방법이 있습니다.
git push origin +origin/master~:master
이 구문은 다음과 같습니다.
git push <remote> <refspec>
여기서,<remote>
이라origin
,그리고.<refspec>
에는 다음과 같은 구조가 있습니다.
+origin/master~:master
자세한 내용은 에서 확인할 수 있습니다.git-push(1)
앞의+
"force push this ref"를 의미하며, 다른 부분은 "from"을 의미합니다.origin/master~
로.master
(원격의)origin
)." 그것을 아는 것은 어렵지 않습니다.origin/master~
이전의 마지막 커밋입니다.origin/master
,그렇죠?
다음 두 가지 명령을 수행합니다.
git checkout commit_id
git push origin +name_of_branch
언급URL : https://stackoverflow.com/questions/4647301/rolling-back-local-and-remote-git-repository-by-1-commit
'programing' 카테고리의 다른 글
MongoDb: 객체 사용의 이점ID와 ID가 포함된 문자열 중 무엇을 선택하시겠습니까? (0) | 2023.07.05 |
---|---|
데이터베이스에서 테이블의 마지막 업데이트/삽입/삭제를 찾는 실용적인 방법은 무엇입니까? (0) | 2023.07.05 |
하위 유형 종속성을 제거하는 방법은 무엇입니까? (0) | 2023.07.05 |
ESLint: TypeError: this.libOptions.parse가 함수가 아닙니다. (0) | 2023.07.05 |
구체적인 클래스 이름을 문자열로 얻는 방법은 무엇입니까? (0) | 2023.07.05 |