我分叉了一个github仓库,并在我的github仓库上工作 我已经提出拉动请求并且已经完成。
之后上游有更多的提交,所以现在我想要改变,我想那就是我要做的事。
但我得到了这些合并冲突:
First, rewinding head to replay your work on top of it...
Applying: Issue 135 homepage refresh
Using index info to reconstruct a base tree...
<stdin>:17: trailing whitespace.
%h4
warning: 1 line adds whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging app/views/layouts/application.html.haml
CONFLICT (content): Merge conflict in app/views/layouts/application.html.haml
Auto-merging app/views/home/index.html.haml
CONFLICT (content): Merge conflict in app/views/home/index.html.haml
Auto-merging app/views/home/_group_projects.html.haml
CONFLICT (content): Merge conflict in app/views/home/_group_projects.html.haml
Failed to merge in the changes.
Patch failed at 0001 Issue 135 homepage refresh
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".
我不知道如何解决这些问题,请帮助。
答案 0 :(得分:83)
重新定位可能是一个真正令人头疼的问题。您必须解决合并冲突并继续重新定位。例如,您可以使用合并工具(根据您的设置而有所不同)
git mergetool
然后添加并提交您的更改并继续
git rebase --continue
祝你好运
答案 1 :(得分:23)
如果在rebase期间发生冲突,您有三种选择:
您可以运行git rebase --abort
来完全撤消rebase。 Git会让你回到你的分支状态,就像调用git rebase之前一样。
您可以运行git rebase --skip
来完全跳过提交。这意味着
没有任何由有问题的提交引入的更改将被包括在内。您很少选择此选项。
你可以解决冲突,正如iltempo所说。完成后,您需要致电git rebase --continue
。我的mergetool是kdiff3,但还有更多可用于解决冲突的东西。您只需要在git的设置中设置合并工具,以便在致电git mergetool
https://git-scm.com/docs/git-mergetool
如果以上都不适合你,那就去散步再试一次:)
答案 2 :(得分:2)
如果您有很多要重新设置的提交,而其中的某些部分产生了冲突,那确实很痛苦。但是我可以建议一种鲜为人知的方法。
首先,签出临时分支并开始标准合并
git checkout -b temp
git merge origin/master
您将必须解决冲突,但是只有一次,只有真正的冲突。 然后暂存所有文件并完成合并。
git commit -m "Merge branch 'origin/master' into 'temp'"
然后返回您的分支机构(将其命名为 alpha )并开始重新设置基准,但会自动解决所有冲突。
git checkout alpha
git rebase origin/master -X theirs
分支已重新设置基础,但项目可能处于无效状态。没关系,我们还有最后一步。我们只需要恢复项目状态,因此将与分支“ temp”上的状态完全相同。从技术上讲,我们只需要通过低级命令 git commit-tree 复制其树(文件夹状态)。加上合并到刚刚创建的提交的当前分支中。
git merge --ff $(git commit-tree temp^{tree} -m "Fix after rebase" -p HEAD)
并删除临时分支
git branch -D temp
仅此而已。我们通过隐藏合并进行了重新设置。
我还编写了一个脚本,因此可以通过对话的方式来完成,您可以找到它here。