我刚刚开始使用git,并且对SVN的工作流程差异印象深刻,但我遇到了一个结构/设置问题,文档似乎没有直观地解释如何设置,而且我我想知道它是否可能。
我的设置是我从桌面和笔记本电脑开发了几台计算机,因此,为了更容易保持同步并为git存储库提供备份,我在家庭Linux上设置了一个“公共”裸存储库我可以从台式机和笔记本电脑进入的服务器。它不是真正公开的,因为它需要SSH访问框才能到达。
当我在桌面上进行更改时,我的问题就出现了,我可以轻松地将更改推送到服务器存储库(我为该存储库上的mirror
远程设置了origin
标志),并使用{ {1}}我可以看到本地和远程状态看起来完全相同,我的每个提交都已记录到服务器。
问题是,当我切换到笔记本电脑时,我很少使用它,git存储库可能有几个提交服务器版本,需要更新。我开始使用gitx
将这些更改本地化,但不是将服务器上的所有单独提交复制到本地存储库,而是向本地存储库添加一个新的“合并”提交,git pull
显示此时在远程存储库分支中合并。
是否有一个命令/工作流可以让我将本地存储库更新到远程存储库的确切状态(如果我执行gitx
没有数据会丢失)?我是否每次都要删除我的本地存储库,每次都要再次git push --mirror
?
目前没有其他人需要访问此存储库,但将来它可能会成为人们撤离的公共存储库,因此不会破坏这种可能性的答案。
编辑:我的提交确实包括从主分支重新分支分支;可能是什么触发了git clone
命令显示为合并?我需要git pull
标志吗?
解决方案说明:事实证明我已完成以下操作来设置我的存储库:
由于这一个额外的提交是一个无意的新错误,它让我认为它永远是一个合并。根据Xentac的建议,我回去在笔记本电脑上发现我做了一个没有被推送到服务器的合并,这是罪魁祸首,一旦我让所有三个真正同步,--rebase
(仅强迫快进合并)工作得很好,如果在合并之前某些内容不同步,则会发出警告。
答案 0 :(得分:4)
因为您的笔记本电脑主分支中的提交不在服务器的主分支中,所以每次服务器更改时,笔记本电脑都不能只更新主分支指针。这就是你创建合并提交的原因。
如果您希望继续进行未存储在服务器上但仅存储在笔记本电脑上的更改,则需要git fetch
,然后git rebase origin/master
。获取将从服务器下载提交但不更改本地分支,并且rebase将在服务器的主分支(origin / master)之上重新创建笔记本电脑的主分支更改。
尽管如此,没有那些承诺可能会更好。难道它们不能整合到整个代码库中才能拥有一个共同的历史记录吗?
答案 1 :(得分:1)
我打算建议使用--ff
标志,但是手册页说这是默认行为。您可以尝试git pull --ff
,看看它是否有所作为。
如果您正在进行合并提交,则表明您的笔记本电脑上有不在服务器上的提交。
您的笔记本电脑是否设置为服务器的镜像,就像桌面一样?