在Git中,主分支更改应该集成到dev分支中。我首先在本地磁盘上制作了DEV的副本,然后将master重命名为DEV分支。然后使用WinMerge手动比较文件。
但看起来这个策略不起作用。我做了一些搜索,其中一个解决方案是使用push'force'来修复它。我们还有其他优雅的方式吗?
这是我的步骤:
aa@lenovo-pc MINGW64 /c/temp/TestGit2App (DevelopmentBranch)
$ git rebase -Xours master #keep the master changes first
# use WinMerge to merge changes back to files ...
git add -A
git commit -m "ddd"
git push
To 192.168.1.8:/home/git/TestGit2App.git
! [rejected] DevelopmentBranch -> DevelopmentBranch (non-fast-forward)
error: failed to push some refs to 'git@192.168.1.8:/home/git/TestGit2App.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
答案 0 :(得分:2)
需要强制将您的开发分支推送到远程,从而覆盖之前的版本,这是您正在使用的rebase工作流程的完全正常部分。当你在master上重新开发你的开发分支时,你重写那个前分支的历史。请考虑以下简单图表,其中dev
和master
分支每个都分别进行一次提交:
master: A -- B
dev: A -- C
当你这样做时
git checkout dev
git rebase master
你最终得到了这个图
master: A -- B
dev: A -- B -- C'
换句话说,您从master
提取了更改,然后在这些更改之上重新提交了所有独特的工作。仔细观察,您会注意到C'
提交有撇号。这表示它与C
分支中的原始dev
提交完全不同。
您的rebase的副作用是dev
分支不能再简单地被推送到远程,因为基础已经改变。相反,你必须通过以下方式强制推送它:
git push --force origin dev
答案 1 :(得分:0)
简而言之,如何管理冲突,你将不得不强行推动。我不喜欢强制推动,因为它意味着你沿途没有正确接近合并。
https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
我会通过检查master并合并该分支来合并您更改的特定提交/分支。这是git的重要组成部分,你不必解决问题,你可以将分支解析为特定的分支。听起来你解决了头部然后重播,这是通过手动更改提交创建订单冲突。
此外,您还可以隐藏您的本地更改并合并弹出您的本地更改的主更改,这将使生活变得更加轻松。