development

되 돌린 Git 커밋을 "복귀 취소"하려면 어떻게합니까?

big-blog 2020. 2. 22. 11:43
반응형

되 돌린 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_branchnamefrom을한다 my_branchname.
그런 다음 첫 커밋 직전에 커밋의 커밋 해시가 git reset --soft $COMMIT_HASH어디 있는지 확인하십시오 ( ) 그런 다음 새 커밋을 작성한 다음 새 브랜치를 푸시 한 다음 새 브랜치에 대한 풀 요청을했습니다.$COMMIT_HASHmy_branchnamegit 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



반응형