10

我正在尝试在 github 项目上开始使用 git。(多年来我一直在使用 CVS、SVN 和 hg;git 很难理解)。我正在尽可能准确地按照说明进行操作,但根本无法使其正常工作。

我克隆了我的分叉项目:

git clone git@github.com:davidgiven/linux-allwinner.git

按照建议,我添加了一个“上游”遥控器,用于跟踪我的项目所派生的项目:

git remote add upstream https://github.com/amery/linux-allwinner.git

我从中获取:

git fetch upstream

这一切都很好。但是,自从我分叉项目以来已经有一周左右的时间了,上游一直在进行更改。所以我想引入这些变化。我目前在正确的分支 --- allwinner-v3.0-android-v2 --- 所以我从上游合并到我的分支:

git merge upstream/allwinner-v3.0-android-v2

...我得到合并冲突。

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]

现在,我什么都没登记;我还没有开始工作,我的项目自从我分叉以来就完全没有受到影响。因此,应该不可能有任何冲突。但是有一些;发生了什么事,我该如何解决?

更新:

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
4

2 回答 2

15

可能是,上游已经改写了历史(rebase,amend,...)——他们不应该那样做,但你永远不会知道。

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

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

这将丢弃任何本地更改并使当前 HEAD 的提交无法访问!


以上假设您将(强制)将分支的新重置状态推送到远程存储库,否则当您尝试从origin.

git push origin +allwinner-v3.0-android-v2

如果您已经在本地提交了自己,则必须在上游分支之上重新设置(或挑选)您的提交,然后推送到原点。这样,您将以与上游相同的方式重写本地历史记录并将更改应用到顶部,即:

git rebase --onto upstream/branch \
  last-original-upstream-commit-before-yours \
  your-branch
于 2012-05-27T14:06:22.920 回答
2

show-branch输出意味着upstream并且自他们的HEAD共同祖先以来每个人都添加了两个提交(假设这是完整的输出)。(另见:http ://www.gitguys.com/topics/git-show-branch-to-see-branches-and-their-commits/ )如果你自己没有提交任何东西,那确实意味着上游推送一个变基(或其他改变历史的东西)。由于您没有提交任何内容,所以 knittl 的答案正是您想要的。

对于它的价值,我也喜欢git log --oneline --graph --decorate --remotes --branches它。您将获得包含所有分支和遥控器的 ASCII 图形,因此您可以可视化发生的情况。

于 2012-05-27T15:41:26.327 回答