누락 된 파일을 포함하도록 과거 커밋을 변경하는 방법은 무엇입니까? 다른 커밋 후 파일이 HEAD^4커밋

변경 사항을 커밋했고 변경 세트에 파일을 추가하는 것을 잊었습니다. 다른 커밋 후 파일이 HEAD^4커밋 에서 누락되었음을 깨달았습니다 .

누락 된 파일을 포함하도록 이전 커밋을 어떻게 다시 작성합니까?



답변

수정하려는 커밋에 대한 옵션을 사용 git rebase --interactive HEAD~4하고 설정 하십시오 edit.

당신이 기억 이 방법 원격 저장소에 밀어 커밋을 수정합니다. 이 경우 누락 된 파일이있는 새 커밋을 추가하는 것이 좋습니다.


답변

사람들이 Google에서 더 간단한 답을 찾기 위해 여기로 올 수 있다는 것을 알고 있습니다 . 마지막 커밋이라면 어떨까요?
(OP의 질문은 역사상 4 번째 커밋을 수정하는 것입니다)

커밋하고 즉시 파일을 추가하는 것을 잊은 경우 다음을 수행하십시오.

# edited file-that-i-remember.txt
git add file-that-i-remember.txt
git commit

# realize you forgot a file
git add file-that-i-forgot.txt
git commit --amend --no-edit

어디 --no-edit동일한 커밋 메시지를 보관할 것입니다.

쉬워요!


답변

이 4 개의 커밋을 푸시하지 않은 경우 다음과 같이 할 수 있습니다.

이러한 모든 커밋에 대한 패치 파일을 만듭니다.

git format-patch -4

커밋 4 개 뒤로 되감기 :

git reset --hard HEAD~4

누락 된 파일 추가 :

git add missing-file

그것을 약속 --amend:

git commit --amend

저장된 모든 패치를 다시 적용하십시오.

git am *.patch

밀었다면이 방법을 사용하지 마십시오. 대신 실수를 인정하고이 문제를 해결하는 HEAD 위에 커밋을 하나 더 만드십시오.


답변

허용되는 답변은 정확하지만 리베이스 프로세스 중에 커밋을 편집하는 방법에 대한 자세한 지침이 없습니다.

  • 먼저 리베이스 프로세스를 시작하십시오.

    git rebase --interactive HEAD~4
    
  • 커밋 목록이 표시되면 단어 pick를 변경하여 편집 할 커밋을 선택 edit하고 파일을 저장합니다.

  • 코드에서 필요한 수정을합니다 ( git add새 파일 을 호출 하는 것을 잊지 마십시오 )

  • 모든 수정이 완료된 후 발행하십시오 git commit --amend. 이것은 다음과 같이 표시된 커밋을 수정합니다.edit

  • git rebase --continue프로세스를 완료 할 호출 (으로 표시된 커밋이 더있는 경우 edit위 단계를 반복해야 함)

중요 사항 :

  • pick편집하지 않으려는 줄은 제거 하지 말고 그대로 두십시오. 이 줄을 삭제하면 관련 커밋이 삭제됩니다.

  • GIT stash는 작업 디렉토리가 깨끗하지 않은 경우 리베이스 하기 전에 강제합니다 . 그러나 git stash pop / git stash apply리베이스 중에 이러한 변경 사항 (즉, 리베이스 프로세스를 시작하기 전에 숨겨진 변경 사항)을 다음과 같이 표시된 커밋으로 수정하기 위해edit

  • 무언가 잘못되어 리베이스 프로세스가 완료되기 전에 변경된 사항을 되돌리려면 (즉, 리베이스를 시작하기 전 지점으로 되돌리려는 경우) 다음을 사용하십시오 git rebase --abort.-또한 읽으십시오 : –abort if –abort does ‘ 일?

  • 받아 들여진 대답에서 말했듯이 :

    이런 방식으로 원격 저장소에 푸시 된 커밋을 수정해서는 안됩니다. 이 경우 누락 된 파일이있는 새 커밋을 추가하는 것이 좋습니다.

    그 이유에 대한 답은 Git Book ( ” Rebasing의 위험 “이라는 제목의 단락 )에 있습니다.

    저장소 외부에있는 커밋을 리베이스하지 마십시오.

    이 지침을 따르면 괜찮을 것입니다. 그렇지 않으면 사람들이 당신을 미워할 것이고 당신은 친구와 가족들에게 멸시를 당할 것입니다.

    리베이스 할 때 기존 커밋을 버리고 비슷하지만 다른 커밋을 새로 만듭니다. 커밋을 어딘가에 푸시하고 다른 사람들이 커밋을 풀다운하고 기본 작업을 수행 한 다음 해당 커밋을 git rebase로 다시 작성하고 다시 밀어 올리면 공동 작업자가 작업을 다시 병합해야하며 시도 할 때 작업이 지저분해질 것입니다. 그들의 작업을 당신의 것으로 되돌립니다.

    […]


답변