Git-由于在线编辑而领先于master
我将git用作我的风投,并将我的本地代表推到BitBucket 我自己在做这个项目,但我犯了一个错误,我从BitBucket的网站在线编辑了一个文件(只是在readme.md中更改了几行) 然后我忘了把更改拉到我的本地代表,我只是不断添加更多的代码,所以现在我不能推我的最后一次提交,因为我是一个提交(online readme.md change)在前面。我担心,如果我现在做git pull,我会删除所有的新代码 有什么我能做的吗?Git-由于在线编辑而领先于master,git,version-control,bitbucket,commit,Git,Version Control,Bitbucket,Commit,我将git用作我的风投,并将我的本地代表推到BitBucket 我自己在做这个项目,但我犯了一个错误,我从BitBucket的网站在线编辑了一个文件(只是在readme.md中更改了几行) 然后我忘了把更改拉到我的本地代表,我只是不断添加更多的代码,所以现在我不能推我的最后一次提交,因为我是一个提交(online readme.md change)在前面。我担心,如果我现在做git pull,我会删除所有的新代码 有什么我能做的吗? (我一点也不介意取消在线提交中所做的所有更改,事实上,摆脱它会
(我一点也不介意取消在线提交中所做的所有更改,事实上,摆脱它会很好。)保持在线提交并推动本地提交的最简单方法是:
git pull --rebase
这将在更新的源代码/master
上重播本地提交然后您将能够正常推送:
git push
事实上,把它扔掉就好了
Push有一个--force
选项来实现这一点,您作为主控
获得的历史记录不包括提交,因此(a)git需要一点额外的推送,(b)由于向上推同步参考,上游的主控
历史记录也不会。请注意,提交实际上仍然在您的上游回购中,只是主回购不再引用它。如果回购协议中没有其他内容引用它,git最终会在那里对它进行垃圾收集,但默认情况下,至少不会在30天内进行垃圾收集
我担心如果我现在做git pull,我会删除所有的新代码
那不行。如果没有(由一个和所有人推荐)--rebase
选项,pull将执行记录的合并,两个提示将列为合并提交的父项。对于对任何人都没有管理意义的事情,通常最好不要费心记录合并
如果您自分支点以来的历史比另一分支的历史长得多(此处,另一[repo]分支只有一个发散的提交),那么值得考虑是否只获取上游提交并挑选它们
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
会直接引用它。git pull--rebase
会将分支的本地版本重新设置到包含自述文件更改的分支的原始(远程)版本上。git pull--rebase
有什么问题?