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


84

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

A
ATest
B
BTest

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

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

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

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

나는 2가 정상적인 방법이라고 생각합니다. 그것에 대한 문제는 무엇입니까?
Adrian Shum

답변:


140

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

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

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


3
감사합니다. 호기심에서 커밋의 sha1이 알려져 있고 커밋이 '마지막'이 아니라면 어떻게 커밋 을 수정할 수 있었을 까요?
James Raitsev

6
@Jam 나는 그렇게하지 않기 위해 정말 열심히 노력한다고 말하고 싶습니다 ;-) 그러나 당신이해야한다면 한 가지 방법 (최고인지 확실하지 않음)은 새 파일을 자체 커밋으로 커밋 한 다음 커밋 git rebase -i을 재정렬하고 병합하는 데 사용하는 것입니다. 다른 커밋과의 새 파일 커밋. 별도의 질문에 대한 자료가 될 수 있습니다.
David Z

3
git rebase -i@DavidZ가 제안한대로 할 때 , 여러분이해야 할 일은 새로운 커밋을 결합하려는 커밋 바로 아래로 이동하고 새 커밋의 단어를 squash대신 변경하는 것입니다pick
MM

많은 파일을 준비했지만 수정 된 커밋에 단일 파일 만 추가하려면 어떻게해야합니까?
dfrankow

준비된 모든 파일 (예 :)을 준비 해제 git reset한 다음 추가 할 파일을 준비하고 커밋을 수정 한 다음 모든 파일을 다시 준비합니다.
William Pursell 2015 년


12

이전 커밋에 파일 추가

작업중인 브랜치를 이미 푸시했다면 먼저 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.


2
"커밋 해시 찾기"와 관련하여. 계산을 시작할 필요가 없습니다. 그냥 사용 git log후 사용, 커밋 찾기 위해 그 해시를 복사 git rebase -i hash^(가) 당신 이전 커밋에서 리베이스 수 있습니다.
Viktor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.