지난 1 시간 동안 파일을 수정했습니다.
A
ATest
B
BTest
내 커밋 메시지 A
가 설명과 함께 커밋 된 실제 변경 사항과 일치하는지 확인하기 위해 . 불행히도 나는 ATest
그 커밋에 포함하지 않았습니다 .
한편, 여전히 최선을 다하고 있습니다하지 B
와 BTest
.
이 시점에서 진행하는 가장 좋은 방법은 무엇입니까? 다음 중 하나를 원합니다.
- 현재 커밋되지 않은 파일에 영향을주지 않고 이전 커밋을 되 돌리시겠습니까?
- 이전 커밋에 동일한 설명으로 다른 파일을 추가 하시겠습니까?
답변
이전 커밋에 새 파일을 추가하려면 :
$ git add new-file
$ git commit --amend
git commit --amend --no-edit
커밋 메시지를 변경하고 싶지 않은 경우 사용할 수 있습니다 .
답변
놀랍게도 편리한 순서도 1 은 다음과 같습니다 . 원래 질문과 수정 된 “마지막 커밋이 아니었다면 어떨까요?”에 대한 올바른 권장 사항을 제공합니다. 질문.
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
.