Command-Line

Git:更改先前送出的內容並推送

  • December 10, 2018

我正在審查一個 repo,我想發表一些評論,它會添加更多內容,例如添加評論,進行一些更改..等等。

如何更改先前送出的文件內容並進行推送,我知道送出歷史記錄將被更改並且所有受影響的文件也將被更改,但 git 會將受影響的文件與進一步的送出(–> 主)進行比較並執行積極改變?

您要求的是將歷史記錄n重寫為 0 次送出。這通常是一個壞主意,因為它會使您的 repo 與遠端和任何其他基於它的 repo 不同步。這將使事情進一步複雜化,以至於其他人將無法再合併,並且需要任何其他 repo 刪除他們的分支並拉下新修改的分支。在這種情況下,您不妨啟動一個新分支並為其添加註釋。無論如何,這會變得有點混亂。

要做到這一點,你有你要審查的合併(例如,我們將使用commitsA和):B``C``A

...A --B --C    (pull-request)
   \
    A'         (review)

git checkout HEAD{3}
git checkout -b review

然後進行您的評論修改並簽入。

git add . # or specify the specific files 
git commit -m "message" --author="original author"

或者,如果您想要相同的消息/作者並且不想輸入它,您可以使用以下內容,我會將其放入腳本或別名 git 命令中:

git add $(git diff-tree --no-commit-id --name-only -r <sha-of-A>)
git commit -m "$(git rev-list --format=%B <sha-of-a>)" --author="$(git rev-list --format=%an <sha-of-A>)"

也可以通過從適當的父級檢索適當的 sha 來自動完成,但我不完全確定如何區分分支父級和合併父級 atm。

下一個合併B審核

git merge <sha-of-B>

然後進行您的評論修改並簽入。(見上文)。

繼續這樣做,直到你完成,你有:

...A --B --C    (pull-request)
   \   \   \
    A'--B'--C' (review)

然後,如果您願意,您可以合併回您的原始分支,或者只是將該審查分支返回給您正在審查的人。

引用自:https://unix.stackexchange.com/questions/487118