2014-03-13 2 views
3

3 커밋 (현재 로컬 컴퓨터에서 GIT 만 사용 중입니다).로컬 커밋을 삭제 하시겠습니까?

커밋 2를 삭제하면 커밋 2에서 커밋 3이 이어 지므로 커밋 3의 변경 사항에 영향을 줍니까?

내가 사용 계획되었다

git reset --hard <commit 2 id here> 
+1

"삭제"커밋 방법에 따라 다름 2. 실행하려는 명령은 무엇입니까? – Shahbaz

+0

계획된 명령으로 질문을 업데이트했습니다. 그러나 그러한 명령이 존재한다면 더 안전한 방법을 선호 할 것입니다. – oshirowanen

+0

'git reset --hard' 명령으로 커밋을 지우지 않으면 이전 커밋으로 돌아갑니다 (기본적으로 모든 것을 잃어 버립니다). 커밋을 취소하는'git revert' 또는 그 시점에서 커밋을 이전 커밋으로 재 적용하여 효과적으로 커밋을 제거하는'git rebase'를 시도해 볼 수 있습니다. 나는 개인적으로'자식 되돌리기 '를 선택할 것이다. – Shahbaz

답변

4

명령

git reset --hard <commit 2 id here> 

가 다른 나뭇 가지가 지적없는 경우 2. 커밋에 당신이 쓰레기를 수집하는 동안 그것을 풀어 5 월 3 일을 커밋에 당신의 현재 지점을 넣어 것 2.이 커밋은 삭제되지 않습니다.

git rebase -i HEAD~2 

그런 다음 편집기를 얻을 것이다 커밋이 시작 나열된 3 커밋 : 당신이 필요로하는 무엇

대화 형 REBASE입니다. 커밋 2로 행을 제거하고 편집기를 저장하고 종료하십시오. 그러면 커밋 2가 제거되고 커밋 3은 그대로 유지됩니다. 커밋 3의 부모는 커밋 1이 될 것입니다. 커밋 2와 함께 도입 된 모든 변경이 완료됩니다.

+0

+1 git rebase -i를 언급합니다. – Tim

0

은 # 3 귀하의 경우 커밋 새로운 부모와 함께 업데이트됩니다 커밋은 # 1를 저지하며 새로운 SHA1을 얻을 것이다. 커밋 # 2와 # 3의 변경 사항이 독립적 인 경우 아무런 문제/충돌이 없어야합니다.

0

세 번째 커밋 만 제거하고 커밋 1과 2를 유지하십시오. 이것은 git rebase을 사용할 수있는 경우 중 하나입니다.

구문은 다음과 같이이다 :

git rebase --onto <branch name>~<first commit number to remove> \ 
<branch name>~<first commit to be kept> <branch name> 

당신이 먼저 reop의 사본에 그것을 밖으로 시도 건의 할 것입니다.

관련 문제