Programing

누락 된 파일을 포함하도록 과거 커밋을 변경하는 방법은 무엇입니까?

lottogame 2020. 8. 27. 08:07
반응형

누락 된 파일을 포함하도록 과거 커밋을 변경하는 방법은 무엇입니까?


변경 사항을 커밋했고 변경 세트에 파일을 추가하는 것을 잊었습니다. 다른 커밋 후 파일이 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 ' 일?

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

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

    The answer why, is in the Git Book (paragraph entitled "The Perils of Rebasing"):

    Do not rebase commits that exist outside your repository.

    If you follow that guideline, you’ll be fine. If you don’t, people will hate you, and you’ll be scorned by friends and family.

    When you rebase stuff, you’re abandoning existing commits and creating new ones that are similar but different. If you push commits somewhere and others pull them down and base work on them, and then you rewrite those commits with git rebase and push them up again, your collaborators will have to re-merge their work and things will get messy when you try to pull their work back into yours.

    [...]

참고URL : https://stackoverflow.com/questions/14369155/how-to-change-past-commit-to-include-a-missed-file

반응형