强制完全同步Git到主分支

18

我所在的工作场所使用Subversion进行源代码控制,因此我一直在使用git-svn来享受自己的分支、自由提交等优势。

由于我的git svn checkout是本地的,因此我也将其克隆到网络共享上作为备份。我的想法是,如果我的桌面电脑出问题了,我至少可以从网络共享中获取未提交更改。

我的工作流程是在桌面电脑上工作、做出更改、提交等等。在一天结束时,我希望使用当前所有更改更新网络共享上的repo。我使用git clone repo_on_my_desktop在网络共享上设置repo,然后使用git pull origin master更新网络共享上的repo。但是,当我使用git rebase将多个提交压缩成一个提交以便于提交到主svn存储库之前,我会遇到一个问题。这样做会导致夜间备份时在网络共享repo上产生合并冲突。

有没有一种方法可以仅仅与我桌面电脑上的repo同步而不每晚都需要重新使用git clone?

2个回答

54

如果你打算从另一个存储库拉取代码,就不应该执行rebase操作。

如果你不介意覆盖网络共享中的更改,你可以这样做:

git fetch origin master
git reset --hard origin/master

这将重置本地主分支为远程主分支。

警告:这是一个硬性的重置,会丢失所有修改(已提交或未提交)。

但我假设你那里并没有真正的修改,只是一个备份。

* 注意:严格来说,已提交的更改直到从引用日志中过期之前不会丢失,但在实际效果上,它们已经丢失了。


1
不,它不会删除多余的文件。 - felixh
如果您有任何更改并且希望放弃它们,您还需要运行 git clean -f -d 命令。这将确保完全同步。 - laimison

8

有两点需要注意:

1/ 我建议你在网络共享中使用裸仓库或者一个捆绑文件(一个文件,更容易移动),详情请参考这里这里

2/ 我更倾向于将network_repo作为你的桌面仓库的远程仓库,并从那里推送 (git push --force network_repo master):这样你就可以留在你的工作仓库了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接