Git - 由于在线编辑而领先于 master

Git - Ahead of master because of online editing

我正在使用 git 作为我的 VCS,并将我的本地代表推送到 BitBucket。

我自己在做这个项目,但我犯了一个错误,我从 BitBucket 的网站上在线编辑了一个文件(只更改了 readme.md 中的几行)。

然后我忘了将更改拉到我的本地代表,我只是不断添加更多代码,所以现在我无法推送我的最后一次提交,因为我提前了一次提交(在线 readme.md 更改) .我担心如果现在 git pull 我会删除所有新代码。

有什么我可以做的吗? (我完全不介意丢失在线完成的提交中所做的所有更改,实际上只是摆脱它会很棒。)

保持在线提交推送本地提交的最简单方法是:

git pull --rebase

这将在更新的 origin/master 之上重播您的本地提交。
然后就可以正常推送了:git push.

actually it would be great to just get rid of it

Push 有一个 --force 选项可以做到这一点,您作为 master 获得的历史记录不包括该提交,因此 (a) git 需要一点额外的推动和 (b) 因为推送同步了上游的 master 历史记录也不会。请注意,提交实际上仍在您的上游存储库中,只是 master 不再引用它。如果该 repo 中也没有其他内容引用它,git 最终将在那里对其进行垃圾收集,但至少在默认情况下不会持续 30 天。

I'm afraid that if I would do git pull now I would erase all my new code

那个,不行。如果没有(由一个和所有人推荐)--rebase 选项,拉取将进行记录的合并,两个提示列为合并提交的父级。对于对任何人都没有管理意义的事情,通常最好不要打扰记录合并。

如果你的分支点以来的历史比另一个分支的历史长得多(这里,另一个 [repo's] 分支只有一个不同的提交)值得考虑是否只获取上游提交和 cherry-选他们。

git fetch origin
git cherry-pick origin/master      # if you know for sure it's just the one commit
# or
git cherry-pick origin/master@{1}..origin/master    # to get however many new ones

这会将所选提交中的更改应用到您的历史记录之上,而不是将您的历史记录中的更改应用到他们的历史记录之上。无论哪种方式,结果内容都是相同的,并且您的 master 直接引用了它。