원격 분기에서 소수의 커밋을 영구적으로 제거하는 방법
나는 그것이 역사를 다시 쓰는 것이라는 것을 압니다. 나쁜 야다야다.
그러나 원격 지점에서 몇 개의 커밋을 영구적으로 제거하는 방법은 무엇입니까?
은 너git reset --hard
색인에서 사항을 와 사용자는 "사용자"입니다.git push --force
(또는 ) 수정된 로컬 지점을 원격으로 전송합니다.
(여기에 있는 다른 솔루션(원격 분기 삭제 및 재실행 포함)
이 SO 답변은 특히 사람들이 자신의 로컬 저장소를 위해 원격 기록에 의존하는 경우 이러한 명령의 위험성을 보여줍니다.
당신은 사람들이 man 페이지의 RECOVERING FROM UPSTREBASE 섹션을 가리킬 준비가 되어 있어야 합니다.
또한, 댓글에 ringo가 지적한 바와 같이 원격 분기가 강제 푸시로부터 보호되는 경우,git revert
이 대답에서 처럼, 더 좋을 수도 있습니다.
Git 2.23(2019년 8월, 9년 후)을 사용하면 새 명령을 사용할 수 있습니다.
즉, 다음과 같습니다.
(교체)n
제거할 커밋 수 기준)
작업 됩니다. 예를 들어,git reset --hard
그럴 것이다.
설명서에는 다음이 추가되어 있습니다.
-C <new-branch> --force-create <new-branch>
와유한과
--create
, 만약 만다라면<new-branch>
합니다. 이 설정은 "미이존합니다재다니"로됩니다. 재설정됩니다.<start-point>
.
이것은 다음을 위한 편리한 바로 가기입니다.$ git branch -f <new-branch> $ git switch <new-branch>
참고로 사용할 수 있습니다.last_working_commit_id
하지 않는 커밋을 경우 ▁when우▁rever
git reset --hard <last_working_commit_id>
따라서 다음으로 재설정하면 안 됩니다.commit_id
우리가 원하지 않는 것.
그러면 원격 지점으로 이동해야 합니다.
git push --force
중요: "git push -f"에 있는 분기를 지정해야 합니다. 그렇지 않으면 실수로 다른 [*]분기를 수정할 수 있습니다!
이 자습서에는 세 가지 옵션이 표시됩니다.연결이 끊어질 경우 주요 단계는 여기에 두겠습니다.
- 전체 커밋 되돌리기
- 마지막 커밋 삭제
- 목록에서 커밋 삭제
1 전체 커밋을 되돌립니다.
git revert dd61ab23
2 마지막 커밋 삭제
git push <<remote>> +dd61ab23^:<<BRANCH_NAME_HERE>>
또는 지점을 로컬로 사용할 수 있는 경우
git reset HEAD^ --hard
git push <<remote>> -f
여기서 +dd61...커밋 해시 및 git는 x^를 x의 부모로 해석하고 +를 강제 비고속 포워드 푸시로 해석합니다.
3 목록에서 커밋 삭제
git rebase -i dd61ab23^
그러면 모든 커밋 목록이 열리고 편집기가 표시됩니다.제거할 항목을 삭제합니다.리포를 완료하고 리포로 힘을 가합니다.
git rebase --continue
git push <remote_repo> <remote_branch> -f
마지막 커밋을 삭제하려면 다음 명령을 실행하여 로컬 분기의 파일 시스템(작업 트리) 및 커밋 기록(인덱스)에서 변경 사항을 제거합니다.
git reset --hard HEAD~3
그런 다음 로컬 컴퓨터에서 다음 명령을 실행하여 원격 분기가 기록을 다시 쓰도록 합니다.
git push --force
축하합니다!다 끝냈어!
참고 사항:
를 실행하여 원하는 커밋 ID를 검색할 수 있습니다.
git log
그면교수있다니습할체러다있▁replace니를 대체할 수 있습니다.HEAD~N
와 함께<desired-commit-id>
다음과 같이:
git reset --hard <desired-commit-id>
사항을 기록하려면 " " " " " " " " " " " " " " ( " " " " ( " " " " ( " " " " " " " " 을 합니다.--soft
처럼 깃발을 내미는.git reset --soft HEAD~3
그런 다음 최신 변경사항을 확인하고 변경사항의 전부 또는 일부를 보관하거나 삭제할 수 있습니다. 후의경 런닝우자런▁in닝우n▁the경▁run자git status
에는 " 변경파표시다니합일을이" 이후 있습니다.<desired-commit-id>
사용하는 경우--hard
선택,git status
로컬 지점이 원격 지점과 정확하게 같다는 메시지가 표시됩니다. 당신이 않경지는우를 사용하지 --hard
도 아니다--soft
인 기모드다같사용다니됩이음과본는▁is▁that▁mode▁used▁is▁default다▁the니사용을 사용합니다.--mixed
모드에서는, 이모에는서드,,git help reset
다음과 같이 말합니다.
인덱스는 재설정하지만 작업 트리는 재설정하지 않습니다(즉, 변경된 파일은 보존되지만 커밋으로 표시되지 않음). 업데이트되지 않은 내용을 보고합니다.
TL:DR;
git switch -C branch_name origin/branch_name~n
git push --force
는 완었습다니에 됩니다. 원격 분기는 다음 사람에 의해 반환됩니다.n
커밋
설명:
사용하다
git switch
분기를 n개의 커밋 수로 재설정합니다. 그-C
옵션을 선택하면 이름이 같은 새 분기가 강제로 생성됩니다.- 체교다를
branch_name
당신의 지점 이름과 함께, - 체교다를
n
되돌리려는 커밋 수와 함께 (명령 끝에) 표시됩니다.
명령 #1:
git switch -C branch_name origin/branch_name~n
예:
git switch -C feature/dashboard origin/feature/dashboard~1
이 명령은 대시보드 분기에서 커밋 1개를 반환합니다.- 체교다를
로컬 변경사항 강제 푸시
명령 #2:
git push --force
팁: 커밋된(밀지 않은) 변경 내용 실행 취소하기git reset HEAD~
유사하게 이 블로그 게시물을 기반으로 pctroll의 답변에서 단순화.
# look up the commit id in git log or on github, e.g. 42480f3, then do
git checkout master
git checkout your_branch
git revert 42480f3
# a text editor will open, close it with ctrl+x (editor dependent)
git push origin your_branch
# or replace origin with your remote
너무 늦었을 수도 있지만 제게 도움이 된 것은 냉정하게 들리는 '핵' 옵션입니다.를 사용합니다.filter-branch
전체 Git 내역을 통해 많은 수의 파일에서 파일을 제거하거나 무언가를 변경할 수 있습니다.
여기에 가장 잘 설명되어 있습니다.
이 문제를 해결하는 가장 쉬운 방법은 코드가 양호한 위치에서 새 분기를 만드는 것입니다.그런 다음 나중에 다른 커밋을 선택해야 할 경우에 대비하여 오류가 발생한 분기 기록을 그대로 둘 수 있습니다.이렇게 하면 커밋 기록이 손실되지 않습니다.
로컬 오류 지점에서:
git log
분기에 적용할 커밋 해시를 복사하고 Git 로그를 종료합니다.
git checkout theHashYouJustCopied
git checkout -b your_new_awesome_branch
이제 당신은 당신이 원하는 대로 새로운 지점을 갖게 되었습니다.
새 분기에 없는 오류 분기의 특정 커밋도 유지해야 하는 경우 필요한 특정 커밋을 선택하면 됩니다.
git checkout the_errant_branch
git log
git 로그를 종료하는 데 필요한 하나의 커밋 해시를 정상 분기에 복사합니다.
git checkout your_new_awesome_branch
git cherry-pick theHashYouJustCopied
자신의 등을 두드리세요.
git reset --soft commit_id
git stash save "message"
git reset --hard commit_id
git stash apply stash stash@{0}
git push --force
저는 리베이스를 사용해서 하는 것을 좋아합니다.아래에서 n은 마지막 n개의 커밋입니다.따라서 세 번째 항목을 삭제하려면 3으로 대체합니다.
git rebase -i HEAD~n
그런 다음 목록에서 원하는 커밋을 찾아 "선택"에서 "삭제"로 변경합니다.rebase를 종료하고 방금 rebase를 수행한 것처럼 "-f" 옵션과 함께 git push를 사용합니다.
언급URL : https://stackoverflow.com/questions/3293531/how-to-permanently-remove-few-commits-from-remote-branch
'programing' 카테고리의 다른 글
PyTorch에서 선호하는 텐서 복사 방법 (0) | 2023.07.18 |
---|---|
시리즈물을 필터링하는 방법 (0) | 2023.07.18 |
도커 - 빌드 단계에서 MySQL/MariaDB 루트 암호를 안전하게 설정합니다. (0) | 2023.07.18 |
데이터베이스 처리량이란 무엇입니까? (0) | 2023.07.18 |
Vim에서 Python 코드 실행 중 (0) | 2023.07.18 |