我想从github repo中提取所有最新的更改。只有一个分支,只有一个人(开发人员)添加和修改代码。添加新功能后,我只需将所有内容都拉进去。
通常,我所做的只是:
git pull
但是这次我收到一条错误信息:
自动合并失败;修复冲突,然后提交结果。
我只是想从回购中提取最新的更改。我不确定为什么只有一个人负责这个回购时会发生冲突。
注意:我不想对回购提交任何内容。
答案 0 :(得分:4)
基本上,如果您只是观看回购并且不更改文件(或者不希望更新后保留更改),请执行以下操作:
git reset --hard HEAD
后跟git pull
。
这必须使用github repo。
中的代码覆盖本地计算机上的代码另一种选择是
git fetch --all
后跟git reset --hard origin/master
。
答案 1 :(得分:1)
git pull
= git fetch
+ git merge
。git merge
。git merge
选择不进行"快进"而不是真正的合并,某人(也许是开发人员,也许是你)必须做一些与众不同的事情。因此,问题的解决方案在于弄清楚"不寻常的事情"和/或涉及的人。
请注意,如果您正在积极进行您自己的更改,那么合并冲突并不罕见。我告诉你你还没有完成自己的git commit
s。
无论如何,要做的第一件事(如果你不想从头开始重新克隆一切)就是终止冲突的合并,这样你就可以回到原来的位置。如果您使用了git fetch
而未使用git merge
。 (您确实通过git pull
同时使用了这两者,而merge
失败了。)要结束合并尝试,因为您处于失败的状态,您可以使用:
git merge --abort
接下来,可能值得弄清楚为什么git想要首先进行合并。最简单的方法是运行以下两个命令:
git fetch
git log --graph --oneline --decorate --all
log
会显示您的分支 - 可能名为master
- 的结尾,以及"远程" (origin/master
)结束。 (git fetch
步骤是为了防止您使用较旧的git,其中git pull
以git fetch
运行git log
,以便跳过一个步骤,这将使* f96824d (HEAD, master) some commit message
* d1574b8 (origin/master) another commit message
* b9491ea a third commit message
...
1}}输出误导。)
如果你看到这样的话:
* 676699a (origin/master) here a commit message
| * 9124325 (HEAD, master) there a commit message
|/
* a19ce3f everywhere a commit message
...
这意味着你有一个他们没有的承诺。 1 如果你看到:
git fetch
然后,再次,你有一个他们不承诺的承诺。
如果你没有进行此(或这些)提交,他们必须撤回某些提交。你拥有它们是因为你曾经使用较早的master
抓住它们,然后将它们放在git merge
分支上,并使用较早的git merge
。但是他们已经撤回了这些提交,然后可能会制作更多新提交。使用您最新的master
,您要求git将旧提交与新提交相结合,并且这些提交存在冲突。
在这两种情况下,您只需强制origin/master
转移到与git reset --hard origin/master
相同的提交,其中包含:
reset
master
命令意味着"取任何我当前的分支" - 在这种情况下,origin/master
- "并使其指向与我完全相同的提交在此输入姓名:--hard
"。 git merge
表示"并且还丢弃我当前的工作树,并将其替换为我现在移动到的提交附件。"
无论如何,您的设置的正常情况正常 - 他们可以拥有您不会提交的提交,但是您拥有的每次提交都是如此。在这种情况下,您的git log --all --decorate --graph --oneline
会发现它可以简单地“滑动”您的分支机构"与他们相匹配,这是一个快速前进的"操作。在这种情况下,* 7cf123a (origin/master) lots of twisty
* b9cce10 little commit messages,
* 009cda1 (HEAD, master) all somewhat alike
...
(这些选项的顺序无关紧要)输出看起来更像:
HEAD, master
在这种情况下,想象一下标签(*
)沿着连接git log --graph --all --decorate
的线向上滑动。 (实际线条太小,无法在此处绘制 - 线条之间没有足够的空间 - 但--oneline
会显示它们:这次我们遗漏gitk
所以有更多的线条;像git log
这样的图形查看器。如上所示,在某些情况下,行有一些空间,|
使用/
和everything up to date
字符等绘制。)
1 实际上,如果你看到这个,你应该从你的git merge
获得{{1}},因此没有冲突。所以我期待像第二个一样。
答案 2 :(得分:0)
你遇到了冲突,因为你在本地仓库上做了一些提交,这与在原点上推送的内容有冲突。
有多种方法可以解决这个问题。
重置原产地的本地仓库。 假设您的分支名称是master。首先使用git fetch下载所有服务器更改,然后使用reset hard将当前分支重新分配到origin分支。
git fetch --all
git reset --hard origin / master
解决文件中的冲突,然后再将其提交。 检查冲突的文件。解决冲突后再将它们添加到索引,然后提交更改。
git add
git commit -m
答案 3 :(得分:0)
您可以通过以下方式
git fetch origin // that will pull all the updates for all the branches
git checkout <branch>
// either of these two below
git pull origin <branch>
// if the above command does not work and shows you conflicts
// to get rid off from conflicts try this
git reset --hard origin/<branch>