Git에서 커밋을 되돌리는 방법
6532 단어 gitcommandline
git revert 구조로!
TL; DR: 원격 저장소에서 커밋을 되돌리는 단계:
위의 명령은 원래 병합 커밋의 모든 변경 사항이 되돌려지는 새 병합 커밋을 만듭니다. 이렇게 하면 리포지토리의 기록이 변경되지 않고 유지되기 때문에 좋습니다.
위에 표시된 선택적 태그는 다음을 의미합니다.
-m n : 병합 커밋을 되돌리는 경우 이 플래그를 숫자와 함께 전달해야 합니다( this StackOverflow post explains why )
–no-edit : 기본 텍스트 편집기 실행을 건너뜁니다.
예제를 살펴보겠습니다.
내 로컬
main
지점은 다음과 같습니다.└❯ git log
commit 9ebef49af9f50996f32c863604b1fc6fdce71e26 (HEAD -> main, origin/main, origin/HEAD)
Author: Flavia Bastos <my_email>
Date: Tue Oct 4 19:22:55 2022 -0300
Fix typo on test name
그런 다음 누군가 새 커밋을 원격에 병합합니다. 새 변경 사항을 가져오면 해당 변경 사항에 대한 새 커밋(
86d1c24f17aa7
) 및 새 병합 커밋( 5aa51c6ea265cc
)이 표시됩니다.└❯ git log
commit 5aa51c6ea265cc43b93a66de97ca4d8fcafc69df (HEAD -> main, origin/main, origin/HEAD)
Merge: 9ebef49 86d1c24
Author: Someone Else <another_email>
Date: Thu Oct 6 17:14:15 2022 -0400
Merge pull request #1 from SomeoneElse/fancy_feature
fancy code
commit 86d1c24f17aa7fd264a26d81533e53f6f48dea24 (origin/fancy_feature, fancy_feature)
Author: Someone Else <another_email>
Date: Thu Oct 6 18:08:49 2022 -0300
fancy code
commit 9ebef49af9f50996f32c863604b1fc6fdce71e26
Author: Flavia Bastos <my_email>
Date: Tue Oct 4 19:22:55 2022 -0300
Fix typo on test name
여기서 병합 커밋(
5aa51c6ea265cc
)은 "Merge"속성의 상위 커밋도 설명합니다.Merge: 9ebef49 86d1c24
이제 이 멋진 코드도 버그가 있었고 이로 인해 일부 문제가 심하게 손상되었습니다.
이 최신 버전
main
에서 새 브랜치를 생성하여 이 문제를 빠르게 해결해 보겠습니다.└❯ git checkout -b bug_fixer
Switched to a new branch 'bug_fixer'
위의
git log
명령의 출력에서 우리는 가장 최근(최상위) 커밋 해시를 원하지만 그 위에 다른 커밋이 있을 수 있음을 알고 있습니다. 항상 git log
로 확인하십시오.이제 버그가 있는 커밋(
5aa51c6ea265cc
)을 되돌려 보겠습니다. 우리는 별도의 브랜치에 있으며 첫 번째 부모-m 1
로 되돌리고 싶기 때문에 9ebef49
플래그를 사용하고 있습니다(-m 2는 두 번째 부모86d1c24
):└❯ git revert 5aa51c6ea265cc43b93a66de97ca4d8fcafc69df -m 1 --no-edit
[bug_fixer 560ad2d] Revert "Merge pull request #1 from SomeoneElse/fancy_feature"
Date: Thu Oct 6 18:30:50 2022 -0300
1 file changed, 1 insertion(+), 1 deletion(-)
이제 남은 것은 이
bug_fixer
분기를 원격으로 푸시하고 이 변경 사항을 병합하는 것입니다.└❯ git push origin bug_fixer
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 402 bytes | 402.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
remote:
remote: Create a pull request for 'bug_fixer' on GitHub by visiting:
remote: https://github.com/FlaviaBastos/my_project_name/pull/new/bug_fixer
remote:
To github.com:FlaviaBastos/my_project_name.git
* [new branch] bug_fixer -> bug_fixer
이 마지막 변경 사항이 원격 저장소에 병합된 후
main
분기로 돌아가서 최신 변경 사항을 가져오고 git log
버그가 있는 커밋이 되돌려졌는지 확인합니다.❯ git log
commit 4332e3e999c2056019cf64255f17b32a6ef1992b (HEAD -> main, origin/main, origin/HEAD)
Merge: 5aa51c6 560ad2d
Author: Someone Else <another_email>
Date: Thu Oct 6 17:53:28 2022 -0400
Merge pull request #2 from FlaviaBastos/bug_fixer
Revert "Merge pull request #1 from SomeoneElse/fancy_feature"
commit 560ad2ddfd207fad2f609873270bdd3f645bb4b6 (origin/bug_fixer, bug_fixer)
Author: Flavia Bastos <my_email>
Date: Thu Oct 6 18:30:50 2022 -0300
Revert "Merge pull request #1 from SomeoneElse/fancy_feature"
This reverts commit 5aa51c6ea265cc43b93a66de97ca4d8fcafc69df, reversing
changes made to 9ebef49af9f50996f32c863604b1fc6fdce71e26.
commit 5aa51c6ea265cc43b93a66de97ca4d8fcafc69df
Merge: 9ebef49 86d1c24
Author: Someone Else <another_email>
Date: Thu Oct 6 17:14:15 2022 -0400
Merge pull request #1 from SomeoneElse/fancy_feature
fancy code
commit 86d1c24f17aa7fd264a26d81533e53f6f48dea24 (origin/fancy_feature, fancy_feature)
Author: Flavia Bastos <my_email>
휴! 위기를 피했다!
그러나 reset --hard 는 어떻습니까? 커밋도 되돌리지 않습니까?
예, 그렇습니다. 그래도 로컬에서만.
git reset
는 repo의 헤드(포인터)를 설정한 커밋으로 이동하여 그 이후의 모든 것을 효과적으로 제거합니다. 원하는 경우 헤드 위의 모든 것을 잘라냅니다. 차이가 사라집니다. 그런 다음 git status
를 수행하면 다른 커밋이 더 이상 표시되지 않으며 준비해야 하는 새로운 항목도 표시되지 않으며 기록을 다시 작성하게 됩니다. 혼자 작업하거나 아직 원격으로 푸시되지 않은 브랜치에서 작업하는 경우에만 안전합니다.원격 저장소에 변경 사항을 푸시해야 하는 경우
git revert
를 사용해야 합니다.더 알아보기:
자식 되돌리기 문서: https://git-scm.com/docs/git-revert
도움이 되셨다면 이 글을 공유해주세요!
How to revert a commit in git
게시물How to revert a commit in git _원래 _flaviabastos.ca에 게시됨
Reference
이 문제에 관하여(Git에서 커밋을 되돌리는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/flaviabastos/how-to-revert-a-commit-in-git-1djc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)