2011-08-04 5 views
10

중간에있는 커밋에 새로운 변경 사항을 추가하는 방법은 맨 위 커밋에 추가하지 않는 것입니다.Git에서 중간에 커밋 변경 사항을 추가하십시오.

git log 
commit1 <--- HEAD 
commit2 
commit3 

commit1과 commit2를 제거한 다음 commit3에 변경 사항을 추가하지 않고 commit3에 직접 변경 사항을 추가하는 방법.

은닉을 사용해야합니까?

가능하면 링크를 제공하십시오.

+0

도 참조 HTTP ://stackoverflow.com/questions/179123/how-do-i-edit-an-incorrect-commit-message-in-git –

답변

2

커밋 3의 복사본 인 새 분기를 만듭니다. 변경 사항을 추가하고 커밋하십시오. 그런 다음 commit2와 commit1을 해당 분기에 병합하십시오.

12

대화 형 리베이스를해야합니다. 자세한 내용은 git rebase의 도움말 페이지를 참조하십시오. 짧은 대답은 평소대로 "중간"변경 사항을 적용한 다음 git rebase -i HEAD~4을 실행한다는 것입니다. 텍스트 편집기에서 마지막 3 가지 커밋 목록을 표시합니다. 가장 최근의 커밋이 중간에 놓인 커밋의 순서를 바꾸고 편집기를 저장하고 종료하십시오. 그러면 Git은 새로운 순서로 히스토리를 재구성하려고 시도 할 것이다. 갈등으로 멈출 수도 있습니다. 그렇다면 병합 충돌과 같이 수정하고 모두 수정 및 추가 한 후 git rebase --continue을 실행하십시오. 충돌이있을 때이 모든 것을 알려주므로 오류 메시지를 읽으면 정상이어야합니다.

편집 : 실제로는 기존 커밋을 편집하려는 것으로 보입니다. 에디터가 나오면이 경우, 새 일시적이 commit3 옆으로 커밋으로 이동하고 "스쿼시"에 명령을 변경에서 "선택"

pick 123456 commit3 
squash 541343 tmpcommit 
pick 654321 commit2 
pick 431523 commit1 

EDIT2을 : 분기 및 commit1, commit2 경우 및 commit3은 이미 공개되어 있으므로 리베이스하지 않아야합니다. 그런 다음 다시 한번, 어쨌든 커밋을 수정해서는 안되므로 전체 질문은 논박의 여지가 있습니다. 나는 이것이 사설 지부이거나 다른 사람들에 의해 rebased되고 rewound 될 것으로 기대되는 것으로 가정하고있다. , 팝업 파일에서

git rebase -i commit3^ 

edit commit3pick commit3을 변경

5

당신은 git-rebase이 작업을 수행 할 수 있습니다. 저장하고 종료 한 다음 변경하십시오. 평소처럼 꾸미고 git rebase --continue을 사용하십시오. 완료되면 commit3과 commit2 사이에 새로운 변경 사항이 표시됩니다.

는 (이 Sjoerd의 대답과 동일하게 작동합니다, 그것은 그것에 대해 생각의 단지 다른 방법 변경 commit2과 충돌, 당신은 어느 쪽이든 것을 처리해야합니다.).

+0

'git commit --amend'를해서는 안됩니다. 'git rebase --continue'는 변경 사항을 추가 한 후 충분합니다 (메시지를 편집하고 싶지 않은 경우). – siride

+0

아마도 맞을 것입니다. –

+1

변경 사항이 이미 작업 트리에있는 경우이 방법은 작동하지 않습니다. 물론, 그는 변경 사항을 숨기고 리베이스를 수행 한 다음 내 대답과 같이 스쿼시 대신 커밋 3을 편집 할 때 언 스타 슈팅 할 수 있습니다. – siride

관련 문제