如果我想從功能分支中選擇一個文件並將其合併到master
中,並且如果真正的合併不重要,我將使用git checkout
。但是,如果在master
中對同一文件進行了新更改,則結帳操作將覆蓋這些更改。使用git checkout來合併文件
我想git checkout
要做的事情基本上是合併文件的變化,而不是簡單地覆蓋它們(這似乎與它的目的相反,我知道)。它應該基本上做下列步驟操作:
git diff <sha1>..<sha2> > changes.patch
git apply changes.patch
當然,我可以創建一個別名這樣做,但我在看是否git checkout
能爲我做到這一點特別感興趣。
在這種情況下應用'git cherry-pick'的問題是它不能理解單獨的文件,所以你不能僅僅使用這個命令帶來單個文件的改變 - 我的意思不是簡單的:你可以調用'git cherry-pick --no-commit ...',然後手動取消除了單個文件以外的所有更改,但這很麻煩。可能比'git diff' +'git apply'路徑更混亂,但仍然... – kostix
Robert提供的差異/應用示例也不會選擇對單個文件的更改,因此我認爲挑選櫻桃將是一個可接受的解決方案。櫻桃挑選提交中的個別更改只是要求頭痛 - 我要重新設置功能分支,所以我想要的更改實際上是在單獨的提交中,然後選擇提交。 – Grantovich
我可以做'git diff .. - path/file.cpp> file.patch'。所以是的,我只能修補一個文件 –