두 개의 이전 커밋을 롤백하는 방법은 무엇입니까?


83

다음 시나리오를 고려하십시오.

  1. 개발자 A는 커밋을 수행합니다. #n
  2. Dev. B는 # n + 1을 커밋합니다 .
  3. Dev. A는 # n + 2를 커밋합니다 .
  4. 그리고 커밋 # n + 3

그리고 그의 커밋 # n + 2에서 그가 결함을 도입했음을 발견합니다.

어떻게 dev. 그의 마지막 두 커밋을 롤백하고 커밋 # n + 1 에서 계속 개발 합니까?

git reset --hard HEAD~2* 시도 했지만 dev A의 커밋 #n으로 돌아옵니다 .


2
git reset HEAD ~ 2는 해당 시점에서 B 커밋을 가져온 경우 # n + 1 커밋으로 재설정해야합니다. 뽑았 어?
Snowbear

1
... # n + 2 커밋 이전이 아닙니다. [0] B 푸시 commit# n + 1, [1] A committed # n + 2, [2] 실패 push, [3] pull, [4] push. 이제 github에는 커밋 (# n + 2)과 Merge 브랜치 'master'(# n + 3)가 있습니다.
Marius Butuc 2011 년

2
이미 커밋을 게시 한 경우 reset을 사용하여 롤백하면 안됩니다. (당신에게 알려지지 않은 다른 개발자가 당겼다면 고통을 줄 것입니다.) 대신, 되돌리기를 사용하고 당신이 원하는 상태로 당신을 가져 오는 새로운 커밋을 만드십시오. 게시 된 기록을 변경하지 마십시오. book.git-scm.com/…
William Pursell

답변:


122

n + 1 커밋으로 돌아와야합니다. 아마도 거기에 병합 커밋이있을 것입니다. 당신은 또한 할 수 있습니다git reset --hard <sha1_of_where_you_want_to_be>

경고!! --hard현재 커밋되지 않은 변경 사항은 영구적으로 버려집니다.


2
원격 커밋의 sha1을 어떻게 얻습니까 (내가 수행하지 않음)? 을 사용해 보았지만 git reflog내 로컬
리플 로그

13
에서 원하는 sha1을 얻었 git log지만 a git push -f도 필요하므로 수정 사항이 github에 반영됩니다.
Marius Butuc 2011 년

1
예하지만 난 : 원격뿐만 아니라 업데이트 싶어 몰랐
아담 Dymitruk에게

25
경고!! --hard현재 커밋되지 않은 변경 사항은 영구적으로 버려집니다. 작업을 버리지 않고 이전 커밋으로 롤백하려면 --soft.
Ken M. Haggerty

4
--soft 대신 --hard의 사용을 설명해주십시오
iuridiniz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.