我正在使用git(在BitBucket上)与另一个人进行项目
我最初有提交:
my_commit_4
my_commit_3
my_commit_2
my_commit_1
现在一周后我去检查BitBucket,它显示:
his_commit_4
his_commit_3
his_commit_2
his_commit_1
his_commit_1
包含所有提交my_commit_x
,以及他自己的一些补充。
我尝试查看reflog
,但仍在本地提交。我无法从origin master
退出,因为出现以下错误:
From https://bitbucket.org/myaccount/myapp
* branch master -> FETCH_HEAD
+ 1145d3e...fa3d2de master -> origin/master (forced update)
fatal: refusing to merge unrelated histories
到底发生了什么?
有没有办法让我的原始提交再次显示在BitBucket中?
答案 0 :(得分:2)
您有不相关的历史记录,因为无论对方是谁,他都会删除您的所有提交内容,并用他的提交内容全部替换。
您可以删除 his 提交,并用您的tit-for-tat替换。如果您有权使用git push --force
(这是他删除您的提交并将其替换为他所必须使用的),那么这可能不是一个好的策略,但这是一个选择。
尽管历史不相关,您仍可以合并。这可能很容易,也可能很难。要合并历史无关的内容,请使用git merge --allow-unrelated-histories
。实际上,Git会在他的所有提交之前以及您的所有提交之前添加一个伪造的提交,他的所有连接和您的所有连接都将添加。伪造的提交完全是空的。因此,他最后一次提交中的所有文件都是新的,完全由他创建。您上一次提交中的所有文件都是新的,完全由您创建;然后,Git将通过合并提交中唯一的文件和提交中唯一的文件,并声明两个提交中所有具有相同名称的其余文件的合并冲突来合并这些文件。您必须手动合并其中的每个文件。
他当然可以再次使用git push --force
来丢弃所有工作。您可能应该确保他不会。
最终,解决此问题的方法是与他交谈,并找出他为什么丢弃您的提交。这可能不是故意的,但如果是故意的,则没有技术解决方案:这是一个政治问题。