在Git中,假设我一直在当地分公司工作:
Common ancestor
/\
A \
/ X
B \
/ Y
C remote
local
我做了本地提交A,B和C,同时远程分支继续提交X和Y.所以我做了拉动并得到:
Common ancestor
/\
A \
/ X
B \
/ Y
C /remote
\ /
\ /
\ /
\/
M
local
如果我现在推,远程历史记录将包括我的所有A,B,C和M提交......但这不是我想要的。
我想只使用与本地分支的差异来推送单个提交,因此远程分支将看起来像这样,没有任何合并的复杂性:
Common ancestor
\
\
X
\
Y
\
N
remote
我怎样才能做到这一点?
答案 0 :(得分:1)
只需将本地更改合并到删除项中即可获得 N 提交:
在本地创建,删除分支 remote_n
,并将远程主服务器中的所有数据提取到 remote_n 分支中:
git branch remote_n
git checkout remote_n
git pull origin master
将master的HEAD合并到 remote_n
,修复不一致,并提交更改,这样您就可以获得单个 N 提交(通过使用--squash
选项):
git merge --squash master
vim ...
git add .
git commit
将结果 N 提交到远程主分支:
git push remote master
注意:您将获得本地 remote_n
分支作为您的回购的新主分支。
如果你真的需要避免合并,请手动执行以下操作:
获取 Common 和 C 提交的差异:
git diff Common_sha C_sha > common_c.diff
将树重置为 Common 提交,拉远程更改,应用差异并提交它:
git reset --hard Common_sha
git pull remote master
git apply --ignore-space-change common_c.diff
git commit
将结果 N 提交到远程主分支:
git push remote master
注意:此模型未考虑git diff
无法显示的二进制文件。
答案 1 :(得分:1)
做一个
git pull --rebase
相当于git fetch
和git rebase
而不是git merge
。