当我从队友那里接受更改时,我通常会rebase
,而且我经常会遇到冲突:
...
CONFLICT (content): Merge conflict in app/views/search/index.html.erb
Auto-merging public/stylesheets/application.css
CONFLICT (content): Merge conflict in public/stylesheets/application.css
Failed to merge in the changes.
Patch failed at 0001 organizing
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
因此,在打开每个冲突文件后,修复它然后提交固定文件:
~/Projects/myApp[956f6e1...]% git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add
我仍然得到同样的错误......
~/Projects/myApp[64b3779...]% git rebase --continue
Applying: organizing
No changes - did you forget to use 'git add'?
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
我总是有这个问题,但我想从来没有真正选择解决它,我会一直懒得和git rebase --skip
。
我如何以正确的方式解决冲突?
答案 0 :(得分:36)
因此,在打开每个冲突文件后,修复它然后提交固定文件......
问题在于你不应该commit
修复。如果a.txt
发生合并冲突,那么您的shell日志应如下所示:
$ vim a.txt # fix conflict
$ git add a.txt
$ # no commit between add and rebase!
$ git rebase --continue
调用git rebase --continue
将负责提交本身。
我不确定在你提交之前如何“回头”,当你处于一个篮板中间时。 git reset --hard HEAD
可能会做到这一点,但就我个人而言,我会感到更安全,只需直接进入git rebase --abort
并重新开始,而不是在中间进行。
答案 1 :(得分:3)
我同意Mark Rushakoff的说法,即修复提交不应包括提交它们。
至少有另一种方式,git将继续说“你必须编辑所有合并冲突,然后使用git add将它们标记为已解决”,即使你已经完成了这项工作。如果从git版本控制中删除文件,但是将未版本控制的文件保留在工作树中,然后尝试执行rebase,则可能会发生这种情况。
我能够解决这个问题如下:
git rebase --abort
git status
tmp
目录git svn rebase
希望有所帮助。
答案 2 :(得分:2)
当我遇到这种情况时,我意识到我已经在rebase期间编辑(并添加到索引)没有冲突的文件后设法解决了,我猜这可能是错误。
所以我使用git checkout -- <filename-with-no-conflict>
,然后使用git rebase --continue
,它就有用了。
答案 3 :(得分:0)
使用Git 2.14(2017年第3季度),在一个不需要答案的修辞问题中给出的这种建议(例如&#34; did you forget to use 'git add'?
&#34;)将不复存在。
commit 6963893,见commit 9932242,commit 6c48686,Jean-Noel Avila (jnavila
)(2017年5月11日)。
(Junio C Hamano -- gitster
--于2017年5月29日commit e638108合并)
可用性:如果不需要回复,请不要提问
当命令的拼写包含时 错误,git程序试图通过提供候选人来帮助用户 这是接近现有的命令。 E.git打印出来 以下内容:
git: 'stahs' is not a git command. See 'git --help'.
Did you mean this?
stash
然后退出。
这个提示的问题在于它没有被正式表示为 事实上,鼓励用户回复这个问题, 而Git命令已经完成。
用户不幸的是,这是他正在寻找的命令 for,and reply&#34; yes&#34;在命令行上,有效地启动了
yes
计划。最初的错误是Git程序在启动时 命令行模式(没有交互)不能提问, 因为这些问题通常需要用户输入作为回复 他们确实无法胜任。这是UX的混乱之源 水平。
为了提高Git套件的一般可用性,遵循以下规则 应用了:
如果句子
- 出现在非交互式会话中
- 在退出前最后打印
- 是针对用户的问题(&#34;你&#34;)
这句话变成了肯定的并提出了选择。
在您的情况下,&#34; did you forget to use 'git add'?
&#34; is now replaced with:
你应该
git add
&#39;每个已解决冲突的文件都标记为这样 您可以在文件上运行git rm
以接受&#34;由他们删除&#34;为了它。
更清楚。
答案 4 :(得分:0)
我已经解决了合并冲突,但我仍然看到
<块引用>您有未合并的路径。
我所要做的就是git add <file that had conflicts>
,一切都很顺利。
答案 5 :(得分:-2)
我发现自己在同一条船上git rebase --continue
没有帮助。正在运行rm -fr .git/rebase-apply
解决了问题