Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git-由于在线编辑而领先于master_Git_Version Control_Bitbucket_Commit - Fatal编程技术网

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

Git-由于在线编辑而领先于master,git,version-control,bitbucket,commit,Git,Version Control,Bitbucket,Commit,我将git用作我的风投,并将我的本地代表推到BitBucket 我自己在做这个项目,但我犯了一个错误,我从BitBucket的网站在线编辑了一个文件(只是在readme.md中更改了几行) 然后我忘了把更改拉到我的本地代表,我只是不断添加更多的代码,所以现在我不能推我的最后一次提交,因为我是一个提交(online readme.md change)在前面。我担心,如果我现在做git pull,我会删除所有的新代码 有什么我能做的吗? (我一点也不介意取消在线提交中所做的所有更改,事实上,摆脱它会

我将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
有什么问题?