되 돌린 Git 커밋을 "복귀 취소"하려면 어떻게합니까?
을 사용하여 커밋 된 commit
다음을 사용하여 되 돌린 변경 사항을 감안할 때 revert
해당 되돌리기를 실행 취소하는 가장 좋은 방법은 무엇입니까?
이상적으로는 기록을 다시 쓰지 않도록 새로운 커밋으로 수행해야합니다.
아직 변경 사항을 적용하지 않은 경우 git reset --hard HEAD^
그렇지 않으면 되돌리기를 되 돌리는 것이 완벽합니다.
또 다른 방법은 git checkout HEAD^^ -- .
다음에 git add -A && git commit
있습니다.
git cherry-pick <original commit sha>
원래 커밋을 복사하여 본질적으로 커밋을 다시 적용합니다.
되돌리기를 되 돌리면 더 확실한 커밋 메시지와 함께 동일한 작업을 수행합니다.
git revert <commit sha of the revert>
이러한 방법 중 하나를 사용하면 git push
되 돌린 후 새 커밋이 생성되므로 기록을 덮어 쓰지 않아도됩니다.
커밋 sha를 입력 할 때 일반적으로 첫 5 ~ 6 자만 필요합니다.
git cherry-pick 6bfabc
되돌리기 커밋은 git의 다른 커밋과 같습니다. 의미는 다음과 같이 되돌릴 수 있습니다.
git revert 648d7d808bc1bca6dbf72d93bf3da7c65a9bd746
변경 사항을 푸시 한 후, 특히 대상 브랜치 ( 마스터 브랜치에 좋은 아이디어)에 강제로 푸시 할 수없는 경우에만 의미가 있습니다 . 변경 사항이 적용되지 않은 경우 다른 게시물에 따라 체리 픽 선택, 되돌리기 또는 되돌리기 커밋을 제거하십시오.
우리 팀, 우리는 사용하는 규칙이 되돌리기 당신이 되돌립니다 무엇을 커밋 확인할 수 있습니다 그래서, 주로 깨끗한 역사를 유지하기 위해 주요 지점에 최선을 다하고 있었다 되돌리기 커밋에를 :
7963f4b2a9d Revert "Revert "OD-9033 parallel reporting configuration"
"This reverts commit a0e5e86d3b66cf206ae98a9c989f649eeba7965f.
...
a0e5e86d3b6 Revert "OD-9055 paralel reporting configuration"
This reverts commit 648d7d808bc1bca6dbf72d93bf3da7c65a9bd746.
...
Merge pull request parallel_reporting_dbs to master* commit
'648d7d808bc1bca6dbf72d93bf3da7c65a9bd746'
이런 식으로, 당신은 역사를 추적하고 전체 이야기를 알아낼 수 있으며, 유산에 대한 지식이없는 사람들조차도 스스로 해결할 수 있습니다. 반면, 체리 픽을 선택 하거나 리베이스 하면 주석에 포함하지 않는 한이 중요한 정보가 손실됩니다.
분명히, 커밋이 두 번 이상 되돌리고 다시 되 돌리면 꽤 지저분 해집니다.
되돌리기를 되 돌리면 트릭을 수행합니다.
예를 들어
경우 abcdef
당신이 커밋하고 ghijkl
있는 당신이 커밋 복귀 할 때 당신이 커밋 abcdef
다음 실행 :
git revert ghijkl
이것은 되돌리기를 되돌릴 것입니다
내가 한 방법은 다음과 같습니다
. 분기 my_branchname
가 병합 된 병합에 포함 된 경우. 그리고 나는 되돌리기를 원했다 my_branchname
.
나는 먼저 git checkout -b my_new_branchname
from을한다 my_branchname
.
그런 다음 첫 커밋 직전에 커밋의 커밋 해시가 git reset --soft $COMMIT_HASH
어디 있는지 확인하십시오 ( ) 그런 다음 새 커밋을 작성한 다음 새 브랜치를 푸시 한 다음 새 브랜치에 대한 풀 요청을했습니다.$COMMIT_HASH
my_branchname
git log
git commit -m "Add back reverted changes"
git push origin new_branchname
그것은 바보처럼 보입니다. 그러나 나는 같은 상황에 있었고 되 돌린 커밋을 위해 복귀했다. 나는 숫자 되돌리기를 했으므로 각 'revert commit'에 대해 되돌리기를해야했습니다.
이제 내 커밋 역사는 조금 이상해 보입니다.
애완 동물 프로젝트이므로 괜찮습니다. 그러나 실제 프로젝트의 경우 되돌리기 전에 모든 커밋 된 코드를 한 번의 커밋과보다 합리적인 주석으로 복원하기 전에 마지막 커밋을 선호합니다.
또는 당신은 할 수 git checkout -b <new-branch>
및 git cherry-pick <commit>
하여에 이전과 git rebase
드롭에 revert
커밋합니다. 이전처럼 풀 요청을 보냅니다.
"리버 트 되돌리기"라는 아이디어가 마음에 들지 않으면 (특히 많은 커밋에 대한 히스토리 정보가 손실되는 경우) 항상 "잘못된 병합 되돌리기" 에 대한 git 문서로 이동할 수 있습니다 .
다음과 같은 시작 상황이 주어지면
P---o---o---M---x---x---W---x
\ /
A---B---C----------------D---E <-- fixed-up topic branch
(W는 병합 M의 초기 복귀이며, D와 E는 처음 중단 된 기능 분기 / 커밋에 대한 수정입니다)
이제 커밋 A를 E로 간단하게 재생할 수 있으므로 되 돌린 병합에 "포함"되지 않습니다.
$ git checkout E
$ git rebase --no-ff P
이제 지점의 새 사본을 master
다시 병합 할 수 있습니다 .
A'---B'---C'------------D'---E' <-- recreated topic branch
/
P---o---o---M---x---x---W---x
\ /
A---B---C----------------D---E
커밋 후에 되돌려 진 비 단계적 및 단계적 변경 사항을 되돌리려면 다음을 수행하십시오.
git reset HEAD@{1}
준비되지 않은 모든 삭제를 복구하려면
git ls-files -d | xargs git checkout --
참고 URL : https://stackoverflow.com/questions/8728093/how-do-i-un-revert-a-reverted-git-commit
'development' 카테고리의 다른 글
순전히 기능적인 프로그래밍의 효율성 (0) | 2020.02.22 |
---|---|
virtualenv를 제거 / 삭제하는 방법 (0) | 2020.02.22 |
힘내 별명 나열 (0) | 2020.02.22 |
'클로저'란 무엇입니까? (0) | 2020.02.22 |
Docker-Compose를 사용하여 여러 명령을 실행하는 방법 (0) | 2020.02.22 |