修复工作副本以匹配推送的最新更改
git checkout HEAD
可能就是您正在寻找的。
来自客户端的推送会更改索引而不是工作文件,因此您的工作文件不会更改,而 git 记录会继续进行。为了只擦除工作文件以支持最新版本,您可以签出推送到服务器的最新版本。
...Edit:
使用两个非裸存储库
我刚刚意识到我为您提供了理解问题的信息(索引隐式更改,但工作文件仅显式更改),但不一定是解决问题的最佳方法。这是我过去所做的事情,如果您不想涉及中央裸存储库,我建议您这样做:
在服务器上:
git branch staging
git checkout staging
在客户端机器上:
Hack away at some changes in master, then push to the server.
在服务器上:git rebase master
(显式更新您的暂存分支以匹配更新的索引。)
最后,如果您想在服务器上进行更改(错误修复,您有什么),您还需要将这些更改同步到主服务器,您可以通过以下方式完成:
在服务器上:
Commit changes made on the staging branch.
git rebase master
git checkout master
git rebase staging
git checkout staging
这样,master 中的每个提交都将处于 staging 状态,并且 staging 分支中所做的每个提交都将是 master 中的最新提交。
即使使用非裸中央存储库,这种工作流程也应该适合您。本质上,您将服务器的主分支保留为空,并将临时分支作为服务器的工作副本。
使用中央裸仓库更干净
一般来说,尽管网络中的两个点看起来最简单,但拥有一个“集中式”裸存储库通常更简单,它允许您始终推送和拉取到该位置,而无需真正考虑它。我还推荐您可以从中获得的网络代码可视化的好处github.com http://github.com出于这个原因(对于开源的东西是免费的,我现在所做的一切都使用它)。