을 사용하여 커밋 된 commit
다음을 사용하여 되 돌린 변경 사항 revert
이있는 경우 해당 되돌리기를 실행 취소하는 가장 좋은 방법은 무엇입니까?
이상적으로는 기록을 다시 쓰지 않도록 새로운 커밋으로 수행해야합니다.
을 사용하여 커밋 된 commit
다음을 사용하여 되 돌린 변경 사항 revert
이있는 경우 해당 되돌리기를 실행 취소하는 가장 좋은 방법은 무엇입니까?
이상적으로는 기록을 다시 쓰지 않도록 새로운 커밋으로 수행해야합니다.
답변:
아직 변경 사항을 적용하지 않은 경우 git reset --hard HEAD^
그렇지 않으면 되돌리기를 되 돌리는 것이 완벽합니다.
또 다른 방법은 git checkout HEAD^^ -- .
다음에 git add -A && git commit
있습니다.
git cherry-pick
또는 대안 git revert
으로 되돌리기를 되 돌리는 가장 간단한 방법 인 것 같습니다 .
Otherwise, reverting the revert is perfectly fine.
다음을 수행 하는 방법을 보여주는 것이 도움이 될 것이라고 생각합니다 git checkout HEAD^^ -- .
.
git add -A
... 모든 파일을 버전 제어에 추가하지 않으려는 경우에는 원하는 것이 아닙니다.
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
이것은 되돌리기를 되돌릴 것입니다
그것은 바보처럼 보입니다. 그러나 나는 같은 상황에 있었고 되 돌린 커밋을 위해 복귀했다. 나는 숫자 되돌리기를 했으므로 각 'revert commit'에 대해 되돌려 야했습니다.
이제 내 커밋 역사는 조금 이상해 보입니다.
애완 동물 프로젝트이므로 괜찮습니다. 그러나 실제 프로젝트의 경우 되돌리기 전에 모든 커밋 된 코드를 한 번의 커밋과보다 합리적인 주석으로 복원하기 전에 마지막 커밋을 선호합니다.
내가 한 방법은 다음과 같습니다
. 분기 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
"리버 트 되돌리기"라는 아이디어가 마음에 들지 않으면 (특히 많은 커밋에 대한 히스토리 정보가 유실되는 경우) 항상 "잘못된 병합 되돌리기" 에 대한 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