[git] 이전 커밋에 파일을 추가하는 방법은 무엇입니까?

지난 1 시간 동안 파일을 수정했습니다.

A
ATest
B
BTest

내 커밋 메시지 A가 설명과 함께 커밋 된 실제 변경 사항과 일치하는지 확인하기 위해 . 불행히도 나는 ATest그 커밋에 포함하지 않았습니다 .

한편, 여전히 최선을 다하고 있습니다하지 BBTest.

이 시점에서 진행하는 가장 좋은 방법은 무엇입니까? 다음 중 하나를 원합니다.

  1. 현재 커밋되지 않은 파일에 영향을주지 않고 이전 커밋을 되 돌리시겠습니까?
  2. 이전 커밋에 동일한 설명으로 다른 파일을 추가 하시겠습니까?



답변

이전 커밋에 새 파일을 추가하려면 :

$ git add new-file
$ git commit --amend

git commit --amend --no-edit커밋 메시지를 변경하고 싶지 않은 경우 사용할 수 있습니다 .


답변

놀랍게도 편리한 순서도 1 은 다음과 같습니다 . 원래 질문과 수정 된 “마지막 커밋이 아니었다면 어떨까요?”에 대한 올바른 권장 사항을 제공합니다. 질문.

Git-pretty 순서도

1 http://justinhileman.info/article/git-pretty/ 에서 가져옴


답변

이전 커밋에 파일 추가

작업중인 브랜치를 이미 푸시했다면 먼저 man 페이지 를 참조하십시오 . 특히 다음 사항에 유의하십시오.

다른 사람들이 작업을 기반으로 한 브랜치를 리베이스 (또는 다른 형태의 재 작성)하는 것은 나쁜 생각입니다. 그 하류에있는 모든 사람은 히스토리를 수동으로 수정해야합니다.

하지만 가지를 밀지 않았다면 위험 구역 에 들어갈 준비를하십시오 .

커밋 해시 찾기

먼저 추가하려는 커밋의 커밋 해시를 알아야합니다. 이것은로 표시됩니다 git log. 실제로 추가하려는 커밋 이전 에 커밋을 지정하고 싶습니다. (변경하려는 커밋 슬라이스에 대한 시작 인덱스라고 생각할 수 있습니다.)를 실행하여 올바른 커밋이 있는지 확인할 수 있습니다 git log -1 HEAD~n. 여기서 ‘n’은 올바른 커밋을 가질 때까지 증가하는 정수입니다. 아니면 셀 수 있습니다.

그러나, 당신이 계산한다면, 적어도 당신이 올바른 커밋을 가지고 있는지 확인 git log -1 HEAD~5하십시오. 추가하려는 커밋이 표시되지 않아야합니다.

위험 , 헤

이제 실행할 준비가되었습니다 git rebase -i HEAD~5. 또는 커밋 해시가 무엇이든. 좋아하는 텍스트 편집기와 편집 할 파일이 나타납니다. 파일은 rebase 명령에 대한 할 일 목록입니다. 파일의 주석은 어떤 옵션이 있는지 알려줍니다. 추가하려는 커밋이있는 줄을 찾고 해당 줄에서 ‘pick’을 ‘edit’로 변경하십시오. 이제 파일을 저장하고 닫습니다.

리베이스는 편집하라는 커밋에 도달하면 중지됩니다. git status제공하는 추가 정보를 보려면 a 를 실행하십시오 . 커밋에 추가 할 파일을 스테이징하거나 파일 git add .이름이 무엇이든 상관 없습니다.

그런 다음 git commit --amend. 편집하기로 선택한 커밋이 수정됩니다.

마지막으로 git rebase --continue.

확실하지 않은 경우 Linux에서 man git-rebase또는으로 출력 된 문서를 통해 더 많은 정보를 찾을 수 있습니다 git --help rebase.


답변