programing

Git과 함께 프로젝트의 첫 번째 커밋을 변경하시겠습니까?

closeapi 2023. 5. 31. 15:55
반응형

Git과 함께 프로젝트의 첫 번째 커밋을 변경하시겠습니까?

프로젝트의 첫 번째 커밋에서 후속 커밋을 모두 잃지 않고 무언가를 변경하고 싶습니다.이것을 할 수 있는 방법이 있습니까?

제가 실수로 원본 이메일을 소스 코드 내의 댓글에 나열했는데, GitHub 인덱싱 봇에서 스팸 메시지를 받고 있어서 변경하고 싶습니다.

아래ecdpalm에서 언급한 바와 같이 git 1.7.12+(2012년 8월)는 옵션을 향상시켰습니다.--root위해서git rebase:

"git rebase [-i] --root $tip이제 "로 이어지는 모든 역사를 다시 쓰는 데 사용할 수 있습니다.$tip근본적인 약속까지.

이러한 새로운 동작은 처음에 여기에서 논의되었습니다.

저는 개인적으로 "git rebase -i --root"를 요구하지 않고 그냥 일하도록 만들어야 합니다."--onto역사상 최초의 것이라도 "편집"할 수 있게 해줍니다.
아무도 신경 쓰지 않는 것은 이해할 수 있습니다. 사람들이 역사의 시작 근처에서 다시 쓰는 경우가 그렇지 않은 경우보다 훨씬 적기 때문입니다.

패치가 이어졌습니다.


(원답, 2010년 2월)

Git FAQ(및 이 SO 질문)에서 언급한 바와 같이 아이디어는 다음과 같습니다.

  1. 새 임시 분기 만들기
  2. 다음을 사용하여 변경할 커밋으로 되감기git reset --hard
  3. 해당 커밋을 변경합니다(현재 HEAD의 맨 위에 있으며 모든 파일의 내용을 수정할 수 있습니다.
  4. 다음을 사용하여 변경된 커밋 위에 분기 기본 재배치:

    git rebase --onto <tmp branch> <commit after changed> <branch>`
    

이 방법은 제거하려는 정보가 나중에 파일의 다른 곳에서 커밋할 때 다시 나타나지 않도록 하는 것입니다.의심스러운 경우 를 사용하여 해당 파일의 내용에 적절한 정보가 포함되어 있지 않은지 확인해야 합니다.

두 경우 모두 모든 커밋의 SHA1을 다시 작성하게 되므로 내용을 수정할 분기를 이미 게시한 경우에는 주의해야 합니다.당신의 프로젝트가 아직 공개되지 않았고 다른 사람들이 당신이 다시 작성하려는 커밋을 기반으로 하지 않은 경우가 아니라면 아마도 당신은 그것을 하지 말아야 할 것입니다.

1.7.12 릴리스 노트에 명시된 바와 같이, 당신은 다음을 사용할 수 있습니다.

$ git rebase -i --root

git rebase -i루트 커밋을 제외한 모든 이전 커밋을 편리하게 편집할 수 있습니다.다음 명령은 이 작업을 수동으로 수행하는 방법을 보여 줍니다.

# tag the old root, "git rev-list ..." will return the hash of first commit
git tag root `git rev-list HEAD | tail -1`

# switch to a new branch pointing at the first commit
git checkout -b new-root root

# make any edits and then commit them with:
git commit --amend

# check out the previous branch (i.e. master)
git checkout @{-1}

# replace old root with amended version
git rebase --onto new-root root

# you might encounter merge conflicts, fix any conflicts and continue with:
# git rebase --continue

# delete the branch "new-root"
git branch -d new-root

# delete the tag "root"
git tag -d root

첫 번째 커밋만 수정하려는 경우 gitrebase를 사용하여 커밋을 수정할 수 있습니다. 이는 다음 게시물과 유사합니다.지정된 커밋을 수정하는 방법은 무엇입니까?

원시 전자 메일을 포함하는 모든 커밋을 수정하려면 필터 분기를 사용하는 것이 가장 좋습니다.Pro Git 책에는 이메일 주소를 글로벌하게 변경하는 방법의 예가 있으며, 이 링크가 유용하다는 것을 알 수 있습니다.

언급URL : https://stackoverflow.com/questions/2246208/change-first-commit-of-project-with-git

반응형