Git 되돌리기를 사용하는 방법 따라 사용 됩니까? 그런 다음

어때 git revert 사용됩니까?

이것은 중복 질문처럼 들릴 수 있지만 사람들이 질문 할 때 응답은 종종 Git의 SHA 해시에 의한 커밋으로 되돌리기에git reset 따라 사용 됩니까?

그런 다음 누군가가 git reset사람들 을 사용하는 방법을 물으면 Git에git revert 따라 사용해야한다고 답장합니다 -롤백 방법

당신이 알기 전에 8 명의 다른 사람들이 OP의 엉덩이를 구하는 독특한 방법으로 나타났습니다. 모두 당신의 머리 위에 있습니다.

그러니 간략한 설명을 집어 넣고에 대한 입문자 가이드를 작성해 보겠습니다 git revert.

시나리오 : 당신은 마스터하기 위해 두 번 헌신했고 그것의 나쁘다. 당신은 밀고 다른 사람들은 당신의 나쁜 변화를 가지고 있습니다.

실행 취소하고 싶습니다. 코드에서 직접 실행 취소 할 수있는 것은 아닙니다. 일부 마법사 또는 패키지 관리자가 사방에서 수많은 항목을 변경했다고 가정합니다. 모든 것을 원래 상태로 되돌리고 싶을뿐입니다.

이것이 바로 소스 제어에 관한 것입니다. 나는 그것이 쉽다고 확신합니다.

좋아, 사용할 git revert거지만 어떻게?

그리고 달리고 나서 git revert다른 일을해야합니까? 변경 사항 되돌리기를 커밋해야합니까? 아니면 repo에 직접 커밋해야합니까?

분명히 당신은 다시 밀어 붙이고 아마도 당신의 공을 팀에 알릴 필요가있을 것입니다.



답변

git revert가 새 커밋을 만듭니다.

git revert 단순히 기존 커밋과 반대되는 새 커밋을 만듭니다.

되 돌린 커밋이 존재하지 않는 것처럼 파일을 동일한 상태로 둡니다. 예를 들어 다음과 같은 간단한 예를 고려하십시오.

$ cd /tmp/example
$ git init
Initialized empty Git repository in /tmp/example/.git/
$ echo "Initial text" > README.md
$ git add README.md
$ git commit -m "initial commit"
[master (root-commit) 3f7522e] initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
$ echo "bad update" > README.md
$ git commit -am "bad update"
[master a1b9870] bad update
 1 file changed, 1 insertion(+), 1 deletion(-)

이 예에서 커밋 기록에는 두 개의 커밋이 있고 마지막 커밋은 실수입니다. git revert 사용 :

$ git revert HEAD
[master 1db4eeb] Revert "bad update"
 1 file changed, 1 insertion(+), 1 deletion(-)

로그에는 3 개의 커밋이 있습니다.

$ git log --oneline
1db4eeb Revert "bad update"
a1b9870 bad update
3f7522e initial commit

따라서 발생한 일에 대한 일관된 기록이 있지만 파일은 잘못된 업데이트가 발생하지 않은 것처럼 보입니다.

cat README.md
Initial text

기록에서 되돌릴 커밋이 어디에 있는지는 중요하지 않습니다 (위의 예에서 마지막 커밋이 되돌려 짐-모든 커밋을 되돌릴 수 있음).

마무리 질문

나중에 다른 일을해야합니까?

A git revert는 다른 커밋 일뿐입니다. 예를 들어 다른 사용자가 변경 사항을 가져 오기 / 가져 오기 / 병합 할 수 있도록 원격으로 푸시하면 완료됩니다.

변경 사항 되돌리기를 커밋해야합니까? 아니면 repo가 ​​repo에 직접 커밋합니까?

git revert 하나의 당신이하고 싶었던 것입니다 커밋 되 돌리는 가정에는 추가 단계가없는 – 커밋.

당연히 당신은 다시 밀어 붙이고 아마도 팀에 발표해야 할 것입니다.

실제로-리모컨이 불안정한 상태에있는 경우-수정 (되 돌리는 커밋)을 얻기 위해 당겨야하는 나머지 팀과 통신하는 것이 올바른 일입니다. :).


답변

다음과 같이 git revert를 사용하십시오.

git revert <insert bad commit hash here>

git revert롤백 된 변경 사항으로 새 커밋을 만듭니다. git reset새 커밋을 만드는 대신 자식 기록을 지 웁니다.

이후 단계는 다른 커밋과 동일합니다.


답변

이유 resetrevert 다른 버전 제어 시스템은 다른 의미 그들을 사용하기 때문에 같은 대화를 많이 마련하는 경향이있다.

특히 파일에 대한 커밋되지 않은 변경 사항을 버리고 싶은 SVN 또는 P4에 익숙한 사람들은 revert실제로 원하는reset .

마찬가지로, revert다른 VCSes에 해당하는 자주 호출 rollback또는 이와 유사한 – 그러나 “롤백”도 평균에 적합한, “나는 완전히 지난 몇 커밋 폐기 할”수 reset있지만를 revert. 따라서 사람들이 무엇을하고 싶은지 알고 있지만 어떤 명령을 사용해야하는지 명확하지 않은 경우 많은 혼란이 있습니다.

되돌리기에 대한 실제 질문은 …

좋아, git revert를 사용할 거지만 어떻게?

git revert first-bad-commit..last-bad-commit

그리고 git revert를 실행 한 후에 다른 작업을해야합니까? 변경 사항 되돌리기를 커밋해야합니까? 아니면 repo에 직접 커밋해야합니까?

기본적으로 git revert는 커밋 메시지를 묻는 메시지를 표시 한 다음 결과를 커밋합니다. 이것은 재정의 될 수 있습니다. 나는 man 페이지를 인용 한다 .

–편집하다

이 옵션을 사용하면 git revert를 사용하여 되돌리기를 커밋하기 전에 커밋 메시지를 편집 할 수 있습니다. 터미널에서 명령을 실행하는 경우 이것이 기본값입니다.

-커밋 없음

일반적으로 명령은 어떤 커밋이 되돌 렸는지 알려주는 커밋 로그 메시지와 함께 일부 커밋을 자동으로 생성합니다. 이 플래그는 명명 된 커밋을 작업 트리 및 인덱스로 되 돌리는 데 필요한 변경 사항을 적용하지만 커밋을 수행하지는 않습니다. 또한이 옵션을 사용하면 인덱스가 HEAD 커밋과 일치 할 필요가 없습니다. 되돌리기는 인덱스의 시작 상태에 대해 수행됩니다.

이는 둘 이상의 커밋 효과를 연속 인덱스로 되돌릴 때 유용합니다.

특히 기본적으로 되 돌리는 각 커밋에 대해 새 커밋을 만듭니다. 를 사용 revert --no-commit하여 변경 사항을 개별 커밋으로 커밋하지 않고 모두 되 돌리는 변경 사항을 만든 다음 여유 시간에 커밋 할 수 있습니다.


답변

질문은 꽤 오래되었지만 되돌리기는 여전히 사람들을 혼란스럽게합니다 (나 같은)

초보자로서 시행 착오 (시행보다 오류가 많음) 후에 중요한 점이 있습니다.

  • git revert의 ID를 필요로하는 것은 커밋 제거 할 당신의 역사로 유지

  • git reset유지하려는 커밋 필요하며 그 이후의 모든 것을 기록에서 제거합니다.

즉, 사용하는 경우 revert 첫 번째 커밋 ID와 함께 하면 빈 디렉터리로 이동하고 기록에 추가 커밋이있는 반면 재설정을 사용하면 디렉터리가 초기 커밋으로 되돌아 가고 기록이 마치 마치 마지막 커밋이 발생하지 않았습니다.

더 명확하게하려면 다음과 같은 로그를 사용하십시오.

# git log --oneline

cb76ee4 wrong
01b56c6 test
2e407ce first commit

를 사용 git revert cb76ee4하면 기본적으로 파일이 01b56c6으로 돌아가고 기록에 추가 커밋이 추가됩니다.

8d4406b Revert "wrong"
cb76ee4 wrong
01b56c6 test
2e407ce first commit

git reset 01b56c6 대신 파일을 01b56c6으로 다시 가져오고 기록에서 다른 커밋을 정리합니다.

01b56c6 test
2e407ce first commit

나는 이것이 “기초”라는 것을 알고 있지만, revert첫 번째 ID ( ‘첫 번째 커밋’)에서 실행 하면 꽤 혼란 스러웠습니다. 초기 파일을 찾을 것으로 예상했습니다. 파일이 다시 필요하면 이해하는 데 시간이 걸렸습니다. ‘첫 번째 커밋’으로 다음 ID를 사용해야합니다.


답변

다음과 같이 ‘git revert commit id’를 실행하여 몇 가지 커밋을 되돌 렸습니다.

git revert b2cb7c248d416409f8eb42b561cbff91b0601712

그런 다음 ‘git commit’을 실행할 때와 마찬가지로 되돌리기를 커밋하라는 메시지가 표시되었습니다. 내 기본 터미널 프로그램은 Vim이므로 다음을 실행했습니다.

:wq

마지막으로 다음을 사용하여 변경 사항을 저장소에 푸시했습니다.

git push


답변