我似乎搞砸了我的git repo,可能是犯下了“不要将你已经推送到公共存储库的提交。”
情景如下:
rebase master
,以便在主分支之上进行自己的更改。这会导致原因冲突,在几个提交中出现以下错误消息(我在下面只包含其中一个作为示例):回到修补基础和3向合并...自动合并 公共/斯卡拉/ qscript /组织/ broadinstitute /刺痛/队列/ qscripts / AlignWithBWA.scala 冲突(内容):合并冲突 公共/斯卡拉/ qscript /组织/ broadinstitute /刺痛/队列/ qscripts / AlignWithBWA.scala 无法合并更改。修补程序在0038失败。添加了检查 索引文件。
解决此问题后,请运行“git rebase --continue”。如果 你宁愿跳过这个补丁,而是运行“git rebase --skip”。 要检查原始分支并停止重新运行“git rebase --abort”。
git rebase --skip
跳过导致问题的提交,最后我得到了我想要的代码。现在,问题是,每次我想要改变我必须经历这个程序。我有什么方法可以避免将来发生同样的冲突吗?我的想法是使用push --force origin devel
来覆盖远程仓库中的历史记录而不会导致冲突。这是要走的路吗?或者还有其他方法可以解决这个问题吗?
答案 0 :(得分:1)
假设上游没有重写公共历史记录,您应该调整您的提交,以便在master的最新代码之上工作。相反,您正在跳过冲突的提交。您需要改为解决冲突,然后使用git add
然后git rebase --continue
(而不是--skip
)将其标记为已解决。
冲突持续发生的原因是你每次都在跳过它们。
执行git push --force
会为使用分支的其他人重写公共历史记录(您可以删除或重新排序他们已经下拉并在其上工作的提交)。最好避免这种情况。
答案 1 :(得分:1)
推力应该只在最严峻的情况下进行。
如果您开始工作后其他人对远程分支进行了任何更改,您将完全覆盖它们。
所以你最好手动解决冲突。
如果代码在同一行上有更改,则需要手动解决。使用武力不是“解决”它们的方法。
你不会每次都得到冲突,如果这是你的经历,那就是你正在学习的时候,在你做这件事,试验和学习的时候可能会有一些事情发生。
另一个需要考虑的选择可能是只需要获取代码,制作副本,删除-r .git目录并为其创建一个新的git repo(git init)。
答案 2 :(得分:1)
我认为git push --force
在这里不是一个好主意。在任何情况下,在使用git push --force
之前,您应该执行git fetch
和git diff devel origin/master
之类的操作来查看您添加的内容以及通过推送移除的内容,并请注意--force
之后的其他内容开发人员将收到警告,可能需要重新调整并重新推动他们的更改。
git rebase --skip
你正在跳过你的devel的提交,而不是取得主人的提交; 一些注意事项: