버전 롤백을 정상적으로 수행하는 방법

버전의 반복 개발 프로세스에서 많은 사람들이 잘못된 제출 시간을 가질 것이라고 믿습니다 (적어도 Liang Xu는이 경험을 여러 번 경험했습니다). 이 경우 신인 프로그래머는 충격을 받고 긴장할 수 있습니다. 선임 프로그래머는 약간 웃으며 밝은 이마를 만진 다음 조용히 버전을 롤백합니다.

버전 롤백을 위해 종종 두 가지 명령을 사용합니다.

  1. 자식 재설정
  2. 자식 되돌리기

이 두 명령의 차이점은 무엇입니까? 걱정하지 마세요. 나중에 자세히 소개하겠습니다.

자식 재설정

시스템에 다음과 같은 제출이있는 경우 :

그중 A와 B는 정상적인 제출이고 C와 D는 잘못된 제출입니다. 이제 C와 D를 롤백하려고합니다. 이때 HEAD 포인터는 D 제출 (5lk4er)을 가리 킵니다. 목표를 달성하려면 HEAD 포인터를 B 제출 (a0fvf8)로 이동하기 만하면됩니다.

자식 기반 친구가 git reset있는 한 명령 을 생각할 것입니다 . 완전한 명령은 다음과 같습니다.

git reset --hard a0fvf8

명령이 실행 된 후 HEAD 포인터는 아래와 같이 B 커밋으로 이동합니다.

이때 원격웨어 하우스의 HEAD 포인터는 변경되지 않고 D 제출에 있습니다. 따라서 git push명령을 직접 사용하는 경우 변경 사항을 원격 저장소로 푸시 할 수 없습니다. 이 시점에서 -f강제로 제출하는 옵션 원격 저장소에 푸시됩니다.

git push -f

이 메서드를 사용하여 코드를 롤백 할 때의 단점은 분명합니다. 즉, HEAD 포인터가 뒤로 이동하여 후속 커밋 정보를 잃게됩니다. 미래에 갑자기 C와 D가 멋진 아이디어를 발견하면 긴 역사의 강에서 사라진 지 오래됩니다.

또한 일부 회사 (예 : Liangxu의 회사)는 위와 동일한 이유로 git reset 명령을 사용하여 코드를 롤백하는 것을 명시 적으로 금지합니다. 따라서 코드를 롤백하고 잘못된 제출을 저장할 수있는 명령을 찾아야합니다. 이때 git revert명령이 유용합니다.

자식 되돌리기

git revert의 역할은 역순으로 새 버전을 만드는 것입니다.이 버전의 내용은 롤백하려는 대상 버전과 동일하지만 HEAD 포인터는 대상 버전이 아닌 새로 생성 된 버전을 가리 킵니다.

git revert 명령을 사용하여 위의 예를 구현하려면 먼저 D를 되 돌린 다음 C를 되돌립니다 (롤백해야하는 커밋이 여러 개있는 경우 새에서 이전으로 되돌려 야합니다).

git revert 5lk4er
git revert 76sdeb

두 개의 새로운 커밋이 여기에 생성됩니다 : D '와 C', 아래와 같이 :

되돌려 야하는 제출물은 2 개 뿐이며 하나씩 되돌릴 수 있습니다. 하지만 수십 개가 있다면 어떨까요? 하나씩은 분명히 너무 비효율적이고 오류가 발생하기 쉽습니다. 일괄 롤백에 다음 방법을 사용할 수 있습니다.

git revert OLDER_COMMIT^..NEWER_COMMIT

이때 잘못된 제출물 C와 D는 여전히 유지되며 향후 팟을 덤핑 할 때 따라야합니다. 또한,이 동작을 HEAD 포인터가 뒤로 이동 git push하면 원격 푸시웨어 하우스에 대한 명령 으로 사용할 수 있습니다 . 그리고 이러한 접근 방식은 기업이 권장하는 것입니다.

더 어려운 예를 들어 보겠습니다.

세 개의 제출물이 있다고 가정 해 보겠습니다. 그러나 불행히도 잘못된 제출물이 중간에 있습니다. 아래 그림과 같이:

이때 git reset 명령을 직접 사용하여 A 제출에 대한 HEAD 포인터를 재설정하는 것은 C 제출이 정확하고 유지되어야하기 때문에 분명히 충분하지 않습니다. B와 C는 먼저 모든 롤백을 제출 한 다음 cherry-pick명령을 사용하여 C를 다시 생성하여 새 제출 C ''를 제출하여 B Commits a rollback 요구 사항을 달성합니다. 전체 프로세스는 다음과 같습니다.

마지막으로 최근에 많은 친구들이 Linux 학습 로드맵 을 요청 했기 때문에 경험을 바탕으로 한 달 동안 여가 시간에 늦게까지 머물며 e-book을 작성했습니다. 당신이 인터뷰에 있든 자기 개선에 있든, 나는 그것이 당신을 도울 것이라고 믿습니다! 디렉토리는 다음과 같습니다.

모든 사람에게 무료로 제공하고, 좋아요를 눌러달라고 요청하세요!

전자 책 | Linux 개발 학습 로드맵

또한이 전자 책을 더 완벽하게 만들기 위해 친구들과 함께 할 수 있기를 바랍니다.

이득? 더 많은 사람들이이 기사를 읽을 수 있도록 오래된 아이언이 쓰리 스트라이크 콤보를 가지기를 바랍니다.

추천 자료 :

추천

출처blog.csdn.net/yychuyu/article/details/108285676