【发布时间】:2014-09-09 19:52:03
【问题描述】:
来自 mercurial,我在 git 的术语和方法上有些挣扎。这是目前的情况:
两台服务器共享同一个存储库。
- 在服务器 1 上,开发人员提交了对 file.php 的更改。
- 在服务器 2 上,开发人员提交了对 file.php 的更改。相同的更改,但不同的提交。
我需要让这些变更集重新同步
要在 mercurial 中解决此问题,我将从服务器 2 运行以下 3 个命令。任何合并冲突都将在编辑器或融合中得到解决。
hg pull -u ssh://remote-server1//shared-repository
hg merge
hg commit -m "Branch Merge"
你是怎么用 git 做这个的?
我做了什么
使用https://www.mercurial-scm.org/wiki/GitConcepts 作为指导,我尝试了git pull,但是它失败了,因为我没有运行git config。这个存储库正在生产中并被许多人共享,所以我尽量避免设置用户名。
按照https://stackoverflow.com/a/17713604/456645,我运行了这个命令:
git fetch ssh://remote-server1//shared-repository
它会响应
From ssh://remote-server1//shared-repository
* branch HEAD -> FETCH_HEAD
我还没有弄清楚在这种情况下如何正确运行git reset。
git reset ssh://remote-server1//shared-repository/master
# FAILS (fatal: Invalid object name 'ssh'.)
git reset origin/master
# FAILS (fatal: ambiguous argument 'origin/master': unknown revision or path not in the working tree.)
git reset FETCH_HEAD/master
# FAILS (fatal: ambiguous argument 'FETCH_HEAD/master': unknown revision or path not in the working tree.)
进一步看,我很困惑只找到一个分支
git branch -a
* master
为了确保它没有自动合并,我检查了历史记录
git log -n 3
# Here, I find the changesets that previously existed. Nothing new
此时,我什至不知道git fetch 会发生什么。我没有看到任何提取的证据。
【问题讨论】:
-
用“git branch -a”列出所有分支。另外,这里有一个 git/mq 备忘单:github.com/sympy/sympy/wiki/Git-hg-rosetta-stone/…
-
"origin" 在上面的重置示例中是其中一个 git 遥控器的名称(运行 git remote -v 以列出您的遥控器)。您可以使用“git remote add server1 ssh://remote-server1//shared-repositor”将远程添加到 repo 1,然后您可以使用“git pull server1”/“git reset server1/mybranch”等。跨度>
-
更新了响应。
git branch -a仍然只显示 * master -
也感谢您的后续评论。那工作得很好。
git reset server1/mybranch是干什么用的?我还没有运行那个命令。 -
@folkol 另外,请随时将此作为答案,我会接受它