我正在尝试在github项目上开始使用git。 (多年来我一直在使用CVS,SVN和hg; git很难引起我的注意)。我会尽我所能并完全无法按照说明进行操作。

我克隆了我的 fork 项目:

git clone [email protected]:davidgiven/linux-allwinner.git

根据建议,我添加了一个“上游” Remote ,该 Remote 可以跟踪我的分支来自的项目:
git remote add upstream https://github.com/amery/linux-allwinner.git

我从中获取:
git fetch upstream

所有这些都很好。但是,自从我 fork 该项目以来已经过去了一周左右,并且上游一直在进行更改。因此,我想提出这些更改。我目前在正确的分支中--- allwinner-v3.0-android-v2 ---所以我从上游 merge 到了我的分支中:
git merge upstream/allwinner-v3.0-android-v2

...然后出现 merge 冲突。
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby/common.h
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby/Makefile
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby.S
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/Makefile
[etc]

现在,我什么都没有检查;我还没有开始工作,自从我 fork 以来,我的项目就完全没有动过。因此,应该不会有任何冲突。但是有一些。怎么回事,如何解决?

更新:
git show-branch HEAD upstream/allwinner-v3.0-android-v2显示了这一点,我不得不说我听不懂以下内容:
! [HEAD] arm: sun3i: add getioaddr macro
 ! [upstream/allwinner-v3.0-android-v2] arm: sun3i: updated irq handling and machine_desc to 3.0
--
 + [upstream/allwinner-v3.0-android-v2] arm: sun3i: updated irq handling and machine_desc to 3.0
 + [upstream/allwinner-v3.0-android-v2^] arm: sunxi: renable early_printk in all _defconfig except crane's
+  [HEAD] arm: sun3i: add getioaddr macro
+  [HEAD^] arm: sun3i: add dummy machine type

最佳答案

可能是上游已经重写了历史记录(重新设置,修改等)–他们不应该这样做,但是您永远不会知道。

由于您说自己没有任何本地更改或提交,因此应通过重置分支将存储库恢复到干净状态:

git reset --hard upstream/allwinner-v3.0-android-v2

(这将丢弃所有本地更改,并使当前HEAD的提交不可访问!)

以上假设您将(强制)将分支的新重置状态推送到远程存储库,否则当您尝试从origin中 pull 出时,您将再次遇到冲突。
git push origin +allwinner-v3.0-android-v2

如果您已经在本地提交了自己的内容,则必须在上游分支的基础上重新整理(或挑选)提交内容,然后将其推送到原始位置。这样一来,您将以与上游相同的方式重写本地历史记录,并在顶部应用更改,即:
git rebase --onto upstream/branch \
  last-original-upstream-commit-before-yours \
  your-branch

关于git - merge 冲突从上游更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10773518/

10-13 09:37