Git으로 프로젝트의 첫 번째 커밋을 변경하시겠습니까?[복제하다]

StackOverflow https://stackoverflow.com/questions/2246208

  •  20-09-2019
  •  | 
  •  

문제

이 질문에는 이미 답변이 있습니다.

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

실수로 소스 코드 내의 댓글에 원시 이메일을 나열했는데, 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 (이 그래서 질문) 아이디어는 다음과 같습니다.

  1. 새 임시 지점 만들기
  2. 다음을 사용하여 변경하려는 커밋으로 되감기 git reset --hard
  3. 해당 커밋을 변경합니다. (현재 HEAD의 맨 위에 있으며 모든 파일의 내용을 수정할 수 있습니다.)
  4. 다음을 사용하여 변경된 커밋 위에 브랜치를 리베이스합니다.

    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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top