如何修复Git推送远程对手

时间:2016-12-07 01:10:46

标签: git

在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.

2 个答案:

答案 0 :(得分:2)

需要强制将您的开发分支推送到远程,从而覆盖之前的版本,这是您正在使用的rebase工作流程的完全正常部分。当你在master上重新开发你的开发分支时,你重写那个前分支的历史。请考虑以下简单图表,其中devmaster分支每个都分别进行一次提交:

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的重要组成部分,你不必解决问题,你可以将分支解析为特定的分支。听起来你解决了头部然后重播,这是通过手动更改提交创建订单冲突。

此外,您还可以隐藏您的本地更改并合并弹出您的本地更改的主更改,这将使生活变得更加轻松。