我有一个服务器,我在其中设置了一个Git存储库.从我的客户,我可以执行
git pull origin
和
git push origin
并且我的更改被正确地推送/拉到远程Git服务器.我还需要能够在服务器上签出项目.我在设置时没有使用init --bare,因为我明确地希望在服务器上也有一个工作副本.
然而,当我运行git pull时,我收到一条致命的消息:你想从今天的哪个地方获取?.如何在服务器上查看我本地工作副本的最新更改?
git checkout HEAD
Run Code Online (Sandbox Code Playgroud)
可能就是你要找的东西.
来自客户端的推送更改索引而不是工作文件,因此您可以在事物的git记录向前移动时保持工作文件不变.为了擦除工作文件以支持最新版本,您可以将已推送到服务器的最新版本签出.
... 编辑:
我刚刚意识到我向你提供了解问题的信息(索引隐式更改但工作文件只是明确更改),但不一定是修复它的最佳方法.以下是我过去所做的事情,以及如果您不想让中央裸存储库参与其中我建议的内容:
在服务器上:
git branch staging
git checkout staging
Run Code Online (Sandbox Code Playgroud)
在客户端机器上:
Hack away at some changes in master, then push to the server.
Run Code Online (Sandbox Code Playgroud)
在服务器上:(
git rebase master显式更新您的暂存分支以匹配更新的索引.)
最后,如果您想从服务器上进行更改(错误修正,您有什么),您还需要将这些更改同步到主服务器,您可以通过以下方式执行此操作:
在服务器上:
Commit changes made on the staging branch.
git rebase master
git checkout master
git rebase staging
git checkout staging
Run Code Online (Sandbox Code Playgroud)
然后你去,master中的每个提交都将在staging中,并且在staging分支中进行的每个提交都将是master中的最新提交.
即使使用非裸中央存储库,这种工作流也应该适合您.基本上,您将离开服务器的主分支,并使分段分支成为服务器的工作副本.
一般来说,尽管网络中的2点似乎最简单,但拥有"集中式"裸存储库通常更简单,它允许您始终推送和拉动到该位置而无需真正考虑它.我还建议你可以从github.com获得网络代码可视化的好处(开源软件免费,我用它来做我现在所做的一切).