Git에서 여러 커밋을 되돌리는 방법

Git에서 여러 커밋을 되돌리는 방법
Git Command Line

Git 커밋 되돌리기 이해

Git 리포지토리에서 여러 커밋을 되돌리는 것은 프로젝트 기록을 변경하지 않고 이전 변경 사항을 실행 취소해야 하는 경우 일반적인 작업입니다. 이는 과거 작업의 무결성을 유지하면서 변경 사항을 되돌리는 안전한 방법입니다. 이 접근 방식은 변경 사항을 다른 사람과 공유했고 리베이스가 더 이상 실행 가능한 옵션이 아닐 때 특히 유용합니다.

커밋 D의 HEAD에서 A로 다시 이동하거나 커밋 B, C, D를 효과적으로 무시하는 등 일련의 커밋을 되돌려야 할 때 문제가 발생합니다. 이러한 커밋을 되돌리는 올바른 방법과 순서를 이해하는 것은 커밋을 유지하는 데 중요합니다. 깨끗하고 기능적인 저장소.

명령 설명
git reset --hard A 현재 브랜치의 HEAD를 지정된 커밋(이 경우 A)으로 재설정하고 해당 커밋 이후 작업 디렉터리와 인덱스의 모든 변경 사항을 삭제합니다.
git push --force 원격 저장소에 강제로 푸시하여 원격 저장소의 변경 사항을 현재 분기 상태로 덮어씁니다. 이는 변경 사항이 이전에 푸시된 경우 하드 리셋 후에 필요합니다.
git revert <commit> --no-commit 되돌리기를 커밋하지 않고 지정된 커밋에 의해 도입된 변경 사항을 되돌립니다. 이를 통해 여러 되돌리기를 단일 커밋으로 그룹화할 수 있습니다.
git commit -m "Message" 제공된 메시지와 함께 현재 준비 영역 콘텐츠를 저장소에 커밋하고 되돌리기 또는 재설정 프로세스를 마무리합니다.

Git 명령 스크립트 설명

제공된 스크립트는 분기를 이전 상태로 재설정하거나 선택적으로 커밋을 되돌려 Git 저장소의 변경 사항을 관리하고 되돌리도록 설계되었습니다. 그만큼 git reset --hard A 명령은 분기의 HEAD를 'A'로 식별되는 이전 커밋으로 직접 재정의하므로 중요합니다. 이 작업은 커밋 A 이후 브랜치에 대한 모든 변경 사항을 삭제하여 사실상 커밋 A의 상태와 동일하게 저장소 상태를 만듭니다. 이 명령은 강력하지만 변경 사항을 영구적으로 지워서 깨끗한 되돌리기가 필요할 때 적합하므로 주의해서 사용해야 합니다. 알려진 양호한 상태로.

그만큼 git revert 명령은 다음과 결합됩니다. --no-commit 옵션은 커밋 B, C, D에 의해 도입된 특정 변경 사항을 실행 취소하고 싶지만 실행 취소된 내용을 기록하고 싶을 때 사용됩니다. 이 방법은 기록을 유지하므로 변경 내용을 이해하는 것이 중요한 공유 저장소에 유용합니다. 필요한 커밋을 되돌린 후 단일 모든 복귀를 하나의 스냅샷으로 그룹화하는 데 사용됩니다. 이를 통해 프로젝트 기록이 단순화되고 복귀 컨텍스트를 더 쉽게 이해할 수 있습니다. 사용 git push --force 브랜치 기록이 크게 변경된 후에는 원격 저장소를 업데이트해야 합니다.

특정 커밋으로 Git 브랜치 재설정

Git 명령줄 사용

git checkout your-branch-name
git reset --hard A
git push origin your-branch-name --force

Git의 여러 변경 사항 되돌리기

Git 작업을 위해 Bash를 사용한 스크립팅

git checkout your-branch-name
git revert D --no-commit
git revert C --no-commit
git revert B --no-commit
git commit -m "Reverted commits B, C, and D"
git push origin your-branch-name

Git 기록 관리를 위한 고급 기술

Git 리포지토리를 다룰 때 고급 사용자에게는 기본 커밋 되돌리기 또는 재설정 이상의 작업이 필요한 경우가 많습니다. 그러한 기술 중 하나는 보다 제어된 기록 편집을 위해 대화형 리베이스를 사용하는 것입니다. 대화형 리베이스를 사용하면 리베이스 세션 중에 세부 목록에서 커밋을 선택, 스쿼시, 편집 또는 생략할 수 있으므로 커밋 기록을 더 세밀하게 제어할 수 있습니다. 이 방법은 복잡한 이력을 메인 브랜치에 병합하기 전에 준비하여 프로젝트 이력을 깨끗하고 이해하기 쉽게 만들 때 특히 유용합니다.

또 다른 고급 방법은 저장소의 브랜치 팁과 기타 참조에 대한 업데이트를 기록하는 Git의 메커니즘인 reflog를 사용하는 것입니다. 리프로그는 공격적인 정리 또는 기록 조작 오류로 인해 더 이상 브랜치 팁을 통해 직접 액세스할 수 없는 프로젝트의 이전 상태를 다시 방문하고 복원해야 하는 복구 시나리오에 매우 유용할 수 있습니다.

필수 Git 질문에 대한 답변

  1. 무엇을 하는가? git reset --hard 명령을 해?
  2. 현재 분기의 HEAD를 지정된 커밋으로 재설정하고 해당 커밋 이후 스테이징 영역과 작업 디렉터리의 모든 변경 사항을 삭제합니다.
  3. 병합 커밋을 되돌릴 수 있나요?
  4. 예, 다음을 사용하여 병합 커밋을 되돌릴 수 있습니다. git revert -m 1 <commit>, 여기서 "1"은 유지할 병합의 상위 커밋을 지정합니다.
  5. 역할은 무엇입니까? git reflog?
  6. reflog는 저장소의 브랜치 팁 및 기타 참조에 대한 변경 사항을 추적하는 데 사용되며, 손실된 커밋을 복구하거나 저장소의 변경 사항을 탐색하는 데 도움이 됩니다.
  7. 어떻게 git rebase 병합과 다른가요?
  8. Rebase는 브랜치의 기반을 새로운 커밋으로 변경하여 프로젝트 기록을 다시 작성하므로 병합에 비해 기록이 더 깔끔해집니다.
  9. 브랜치를 재설정한 후 강제로 푸시해도 안전합니까?
  10. 변경 사항이 이미 푸시된 경우 재설정 후 강제 푸시가 필요하지만 원격 변경 사항을 덮어쓸 수 있으므로 주의해서 사용해야 합니다.

Git 커밋 복귀에 대한 최종 생각

여러 커밋을 되돌려야 할 때 Git 리포지토리를 성공적으로 관리하려면 사용 가능한 기술과 의미를 이해해야 합니다. 특정 커밋에 대한 하드 재설정을 통해서든, 각 커밋에 대한 되돌리기 명령을 주의 깊게 사용하든, 목표는 저장소를 깨끗하게 유지하고 기록을 이해할 수 있도록 하는 것입니다. 협업 프로젝트의 경우 이러한 변경 사항을 전달하고 원격 저장소를 신중하게 관리하여 중단을 방지하는 것이 중요합니다. 궁극적으로 이러한 명령을 익히면 개발자는 프로젝트 일정을 효과적으로 제어할 수 있습니다.