Git으로 프로젝트의 첫 번째 커밋을 변경하시겠습니까?[복제하다]
-
20-09-2019 - |
문제
이 질문에는 이미 답변이 있습니다.
- Git에서 루트 커밋을 편집하시겠습니까? 답변 5개
모든 후속 커밋을 잃지 않고 프로젝트의 첫 번째 커밋에서 무언가를 변경하고 싶습니다.이를 수행할 수 있는 방법이 있습니까?
실수로 소스 코드 내의 댓글에 원시 이메일을 나열했는데, GitHub를 인덱싱하는 봇으로부터 스팸을 받고 있어서 이를 변경하고 싶습니다.
해결책
에서 언급했듯이 ecdpalma 아래에, 자식 1.7.12+ (2012년 8월) 옵션이 강화되었습니다. --root
~을 위한 git rebase
:
"git rebase [-i] --root $tip
"는 이제 다음으로 이어지는 모든 기록을 다시 작성하는 데 사용할 수 있습니다."$tip
" 루트 커밋까지.
그 새로운 행동은 처음에는 여기서 논의됨:
나는 개인적으로 "라고 생각한다.
git rebase -i --root
" 요구하지 않고 그냥 작동하도록 만들어야 합니다 "--onto
" 그리고 역사상 첫 번째 항목도 "편집"할 수 있습니다.
사람들이 역사가 시작될 무렵에 다시 쓰는 경우가 다른 경우보다 훨씬 적기 때문에 아무도 신경 쓰지 않았다는 것은 이해할 수 있습니다.
그만큼 패치 followed.
(원래 답변, 2010년 2월)
에서 언급했듯이 힘내 FAQ (이 그래서 질문) 아이디어는 다음과 같습니다.
- 새 임시 지점 만들기
- 다음을 사용하여 변경하려는 커밋으로 되감기
git reset --hard
- 해당 커밋을 변경합니다. (현재 HEAD의 맨 위에 있으며 모든 파일의 내용을 수정할 수 있습니다.)
다음을 사용하여 변경된 커밋 위에 브랜치를 리베이스합니다.
git rebase --onto <tmp branch> <commit after changed> <branch>`
비결은 제거하려는 정보가 나중에 파일의 다른 위치에 커밋되어 다시 도입되지 않도록 하는 것입니다.의심된다면 사용해야 합니다. filter-branch --tree-filter
해당 파일의 내용에 합리적인 정보가 커밋에 포함되어 있지 않은지 확인하십시오.
두 경우 모두 결국 모든 커밋의 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
첫 번째 커밋만 수정하려면 git rebase를 시도하고 이 게시물과 유사한 커밋을 수정할 수 있습니다.git에서 지정된 커밋을 수정하는 방법은 무엇입니까?
원시 이메일이 포함된 모든 커밋을 수정하려면 filter-branch가 최선의 선택입니다.책에 전역적으로 이메일 주소를 변경하는 방법에 대한 예가 있습니다. 프로 Git, 이 링크가 유용할 수도 있습니다. http://git-scm.com/book/en/Git-Tools-Rewriting-History