【发布时间】:2011-04-29 03:35:13
【问题描述】:
我正在和我的朋友一起使用 git。 我做了一些提交,我的朋友没有更新他的本地仓库并使用 -f 参数推送:
git push -f origin master
现在在 git 服务器 (github) 中,我的提交被销毁了,最新的提交是我的朋友。但我有本地提交的历史。我可以以某种方式将它们合并回主人吗?还是我必须用最新版本手动完成?
【问题讨论】:
我正在和我的朋友一起使用 git。 我做了一些提交,我的朋友没有更新他的本地仓库并使用 -f 参数推送:
git push -f origin master
现在在 git 服务器 (github) 中,我的提交被销毁了,最新的提交是我的朋友。但我有本地提交的历史。我可以以某种方式将它们合并回主人吗?还是我必须用最新版本手动完成?
【问题讨论】:
似乎您的朋友确实更改了已在公共存储库上发布的内容。见http://progit.org/book/ch3-6.html。从烧掉你的朋友开始。
通常一个 git pull 应该在你这边触发一个合并。您可以随时复制整个存储库作为备份以防万一。此外,您可以简单地将最新版本中的更改复制到新的签出处,并将所有这些更改作为一次提交提交。
【讨论】:
我还没有对此进行测试,但我认为我会强制将您的提交发布到 github(从而再次重写历史),让您的“朋友”拉动您的更改,重新调整他的更改,然后推送他的变化。这样,您可以将两个更改都放在同一个地方。
一个好的经验法则是永远不要强制提交到 GITHUB :) 这样做一次可以让你的 repo 恢复到你的“朋友”搞砸之前的状态:
# on your machine
git push origin master --force
#now your "friend's" working copy is fairy screwed up, so on his machine:
git checkout -b screwed_up #checks out a new branch called screwed_up
git pull origin master # pulls in your changes
git checkout master #checks out his version with his changes
git rebase screwed_up #moves his changes to the end of your changes (see git graphs for more details)
git commit -am 'your message here'
git push origin master #pushes his changes, which are now merged with your changes back to github
【讨论】:
推迟您自己的本地提交是一种方法 (git push origin master --force),但它会抹去您朋友的贡献。
你可以:
master(参见“renaming remote git branch”)git push origin master(用完整的内容重新创建主分支)然后您的朋友可以简单地将他/她的本地master 分支重置为origin/master。
【讨论】: