在 Git 中,master 分支的更改应该集成到 dev 分支中。我首先在本地磁盘中制作了 DEV 的副本,然后将 master 重新设置为 DEV 分支。然后使用WinMerge手动比较文件。
但看起来这个策略不起作用。我做了一些搜索,解决方案之一是使用推送“强制”来修复它。我们还有其他优雅的方式吗?
这是我的步骤:
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.
Run Code Online (Sandbox Code Playgroud)
需要强制将您的开发分支推送到远程,从而覆盖之前的版本,这是您正在使用的变基工作流程中完全正常的部分。当您在 master 上重新建立开发分支时,您重写了前一个分支的历史。考虑下面的简单图表,其中dev和master分支各相差一次提交:
master: A -- B
dev: A -- C
Run Code Online (Sandbox Code Playgroud)
当你这样做的时候
git checkout dev
git rebase master
Run Code Online (Sandbox Code Playgroud)
你最终得到了这张图
master: A -- B
dev: A -- B -- C'
Run Code Online (Sandbox Code Playgroud)
换句话说,您提取了更改master,然后在这些更改的基础上重新提交了所有独特的工作。如果仔细观察,您会发现该C'提交有一个撇号。这表明它是与分支C中的原始提交完全不同的提交dev。
变基的副作用是dev分支不能再简单地推送到远程,因为基础已经改变。相反,您必须通过以下方式强制推送它:
git push --force origin dev
Run Code Online (Sandbox Code Playgroud)