Git에서 루트 커밋을 편집 하시겠습니까?

나중에 커밋에서 메시지를 변경하는 방법이 있습니다.

git commit --amend                    # for the most recent commit
git rebase --interactive master~2     # but requires *parent*

부모가없는 첫 번째 커밋의 커밋 메시지를 어떻게 변경할 수 있습니까?



답변

깨끗한 작업 트리가 있다고 가정하면 다음을 수행 할 수 있습니다.

# checkout the root commit
git checkout <sha1-of-root>

# amend the commit
git commit --amend

# rebase all the other commits in master onto the amended root
git rebase --onto HEAD HEAD master


답변

Git 버전 1.7.12 부터는 다음을 사용할 수 있습니다.

git rebase -i --root

선적 서류 비치


답변

ecdpalma의 답변 을 확장하려면 이제 --root옵션을 사용 rebase하여 루트 / 첫 번째 커밋을 다시 쓰 겠다고 말할 수 있습니다.

git rebase --interactive --root

그러면 루트 커밋이 rebase TODO 목록에 표시되며이를 편집하거나 변경하도록 선택할 수 있습니다.

reword <root commit sha> <original message>
pick <other commit sha> <message>
...

이것은의 설명이다 --root에서 망할 놈 REBASE 워드 프로세서 (강조 광산) :

<branch>으로 제한하지 않고 에서 도달 가능한 모든 커밋을 리베이스하십시오 <upstream>. 이를 통해 브랜치에서 루트 커밋을 리베이스 할 수 있습니다 .


답변

더 높은 등급의 답변에 대한 대안을 제공하기 위해 :

리포지토리를 만들면서 앞으로 “첫 번째”실제 커밋을 기반으로 할 것임을 미리 알고 있다면 처음에 명시 적으로 빈 커밋을 만들어이 문제를 피할 수 있습니다.

git commit --allow-empty -m "Initial commit"

그런 다음 “실제”커밋을 시작하십시오. 그런 다음 표준 방식으로 커밋을 쉽게 리베이스 할 수 있습니다.git rebase -i HEAD^


답변

당신은 사용할 수 있습니다 git filter-branch:

cd test
git init

touch initial
git add -A
git commit -m "Initial commit"

touch a
git add -A
git commit -m "a"

touch b
git add -A
git commit -m "b"

git log

-->
8e6b49e... b
945e92a... a
72fc158... Initial commit

git filter-branch --msg-filter \
"sed \"s|^Initial commit|New initial commit|g\"" -- --all

git log
-->
c5988ea... b
e0331fd... a
51995f1... New initial commit


답변