나는이 주제에 대한 비슷한 게시물을 읽었으며 내 인생에서는이를 올바르게 수행하는 방법을 알 수 없습니다.
나는 원하지 않는 약 1000 개의 파일을 체크인했으며, 1by1을 거치지 않고 저장소에서 모두 제거하지 않아도됩니다.
- 원격
master
지사가 있습니다. - 현지
master
지사가 있습니다.
그들은 모두 같은 개정판에 있습니다.
1 커밋으로 리모컨을 롤백하고 싶습니다.
내 역사는 master
입니다 A--B--C--D--E
.
내 지역을로 롤백하고 싶습니다 D
.
그런 다음 원격으로 푸시하여 현재 해시가 원격 및 로컬 모두 D가되도록하십시오.
이 작업을 수행하는 데 문제가 있습니다.
Git Tower를 사용하고 있지만 커맨드 라인에 익숙합니다. 어떤 도움?
업데이트 :
아래에 큰 의견. 특히 리포지토리가 다른 사용자와 공유되는 경우 재설정을 사용하지 않는 것이 좋습니다.
하드 리셋을 사용하지 않고 이전 커밋의 변경 사항을 취소하는 가장 좋은 방법은 무엇입니까 ? 방법이 있습니까?
답변
아무도 원격 저장소를 아직 가져 오지 않은 경우 분기 HEAD를 변경하고 해당 원격 저장소로 강제 푸시 할 수 있습니다.
git reset --hard HEAD^
git push -f
(또는 원격 리포지토리에 직접 액세스 할 수 있는 경우 베어 리포지토리 인 경우에도 HEAD 참조를 변경할 수 있음 )
아래의 의견 에서 alien-technology 가 언급 한대로 Windows (CMD 세션)에서는 다음이 필요합니다 .^^
git reset --hard HEAD^^
git push -f
2011 업데이트 :
사용 git push --force-with-lease
( 내가 여기에 제시하는 것이 힘내 1.8.5 2013 년에 도입은) 안전합니다.
누군가 이미 저장소를 가져간 경우 어떻게됩니까? 그러면 어떻게해야합니까?
그런 다음 역사를 다시 쓰지 않는 것을 제안합니다.
git revert
로컬로 마지막 커밋 (이전 커밋과 반대로 새로운 커밋 만들기)- 에서 생성 한 ‘되돌리기’를 누릅니다
git revert
.
답변
로컬 브랜치를 하나의 수정본으로 다시 설정하십시오 ( HEAD^
하나의 수정본을 다시 의미).
git reset --hard HEAD^
변경 사항을 원점으로 푸시하십시오.
git push --force
그렇지 않으면 git이 뒤에 있다는 것을 인식하기 때문에 강제로 밀어야합니다. origin
한 번의 커밋으로 하고 아무것도 변하지 합니다.
그것을 사용하면 --force
git HEAD
은 원격 저장소에서 사전에 상관없이 덮어 쓰라고 지시 합니다.
답변
마지막 커밋 청취를 되돌리려면 다음을 수행하십시오.
1 단계:
메시지로 지역 커밋 확인
$ git log
2 단계:
로컬 브랜치 (또는 마스터)에서 변경 사항을 재설정하지 않고 마지막 커밋 제거
$ git reset HEAD^
또는 마지막 커밋 파일 및 업데이트 수신을 원하지 않는 경우
$ git reset HEAD^ --hard
3 단계 :
파일과 코드를 업데이트 할 수 있으며 이전 커밋을 삭제하도록 강제로 다시 푸시해야합니다. 새로운 커밋을 유지합니다.
$ git push origin branch -f
그게 다야!
답변
다음 명령을 입력하면 git commit history를 볼 수 있습니다-
$ 자식 로그
특정 분기의 히스토리가 commit_A, commit_B, commit_C, commit_D와 같다고 가정 해 봅시다. 여기서 commit_D는 마지막 커밋이고 HEAD가 남아있는 곳입니다. 이제 로컬 및 원격에서 마지막 커밋을 제거하려면 다음을 수행해야합니다.
1 단계 :-로 로컬에서 마지막 커밋 제거
$ git reset-하드 헤드 ~
커밋 HEAD가 commit_C로 변경됩니다.
2 단계 : 새 HEAD 커밋에 대한 변경 사항을 원격으로 푸시
$ git push origin + HEAD
이 명령은 원격에서 마지막 커밋을 삭제합니다.
PS이 명령은 Mac OSX에서 테스트되었으며 다른 운영 체제에서도 작동합니다 (다른 OS에 대해서는 주장하지 않음).
답변
Windows 시스템의 경우 다음을 사용하십시오.
git reset HEAD~1 #Remove Commit Locally
답변
보다 안전한 업데이트 된 버전의 절차가 있습니다.
git reset --hard HEAD^
git push --force-with-lease
git push -f
원격 저장소를 자신의 변경 사항으로 무차별 적으로 대체합니다. 다른 사람이 변경 사항을 푸시하면 손실됩니다. git push --force-with-lease
리포지토리가 예상 대로만 리베이스를 푸시합니다. 다른 사람이 이미 푸시 한 경우 푸시에 실패합니다.
– 유해한 것으로 간주되는 힘을 참조하십시오 . git의 임대에 대한 이해 .
이 별칭을로 지정하는 것이 좋습니다 repush = push --force-with-lease
.
누군가 이미 저장소를 가져간 경우 어떻게됩니까? 그러면 어떻게해야합니까?
그들에게 알려주십시오 git pull --rebase=merges
. 대신의 git fetch origin
와 git merge origin/master
그것을 의지 git fetch origin
하고 git rebase -r origin/master
. 이것은 master
새로운 rebased 위에 로컬 변경 사항을 다시 작성합니다 origin/master
.-r
병합 한 내용을 보존합니다.
이것을 기본 동작으로 설정하는 것이 좋습니다. 안전하고 다른 사람의 리베이스를 처리하고 불필요한 병합을 줄입니다.
[pull]
rebase = merges
답변
이 명령으로 당신과 같은 문제를 해결했습니다.
git reset --hard HEAD^
git push -f <remote> <local branch>:<remote branch>