你可以用git和bash的組合來實現。我寫了一個示例腳本來展示如何完成它。你可以隨時修改它並使其更好。我也提供了一些解釋。該文件被稱爲adder.sh
。
#!/bin/bash
# $1 -> Files from the branch you want (core)
# $2 -> Branch you want to merge into (master)
git checkout $2
git diff --name-status $1..$2 | grep '^\(D\|M\)\s*' | cut -f2 > ~/.dummy
git checkout $1 -- $(cat ~/.dummy)
git add .
要調用它,只需使用$ sh adder.sh core master
。在此之後,core
分支中的所有新添加和修改的文件都將添加到master
回購。使用git狀態,您可以看到新增內容,然後進行相應的提交和推送。
$ git commit -m "Skipping Conflicts"
$ git push
一些解釋它是如何工作的:
$ git diff --name-status master..core
產生以下輸出:
M public/stylesheets/main.css # Modified
D public/templates/createUser.html # Present in core branch and not master (new file)
A public/templates/dashboard.html # Present in master and not in the core branch (don't touch)
所以寫一個簡單的正則表達式來只選擇修改,新文件和將其修改爲適當的格式,然後將其存儲在臨時文件中。
$ cat ~/.dummy
public/templates/createUser.html
public/stylesheets/main.css
然後我們需要將這些文件添加到我們當前的分支,所以我們使用git checkout。有關如何使用git checkout
,請參閱this answer。
還有另一種方法可以做到這一點。官方的方式,使用git rerere
。從the man page:
在工作流程採用相對長期的特性分支,開發人員有時需要一遍又一遍地解決同樣的衝突,直到話題分行完成(或者合併到「釋放」分支,或發送並接受上游)。
此命令通過記錄初始手動合併衝突automerge結果和相應的手的決心的結果,以及應用先前記錄的手的分辨率爲它們相應的automerge結果有助於這個過程中的顯影劑。
注意:您需要設置,以使該命令rerere.enabled配置變量。
This article給出了一個體面的命令及其使用案例的概述。
不能使用[子模塊](https://git-scm.com/docs/git-submodule)? –
你想'git checkout分支 - 文件...'也許? – o11c
Git正在項目級別工作。除非您使用子模塊,否則無法爲特定文件「選擇」備用遠程設備。 –