在有人说这是重复之前,大多数答案告诉我首先克隆远程存储库,这意味着在Machine2上,我不应该首先拥有该项目。
我首先做的是 - 来自包含项目X的Machine1:git init
,git commit -am "Initial Commit"
,(为简洁起见未设置遥控器),然后是git push -u origin master
。
但是,在Machine2上,除了没有.git文件和文件夹之外,我有完全相同的Project X.现在,我想设置Machine2:// Project X以拉动并推送到同一个远程存储库。我应该在Machine2上设置git,然后提交,然后拉?我不确定正确的做法是为了我所要求的。
这是我所做的,我觉得有效,但是很乏味,或者可能是错误的。我想要一种更短更好的方式。
git init
,git -am "Initial Commit Machine2"
git pull [remote repo url]
当我输入git log --oneline
时,我注意到最近的提交称为"合并[remote repo url]",然后是我创建的提交,"初始提交机器2",
然后repo以预期的降序提交。我不想包含Machine 2提交,所以,
git reset --hard [SHA of the latest commit from the remote repo as obtained]
git commit -am "Adds clearer comments on classX.cs"
git remote add origin [remote repo url]
git push -u origin master
从Machine1,我能够从Machine2中提取/推送的更改,这就是我想要的。
这似乎很乏味,特别是我有两个存储库可以在两台机器之间同步。
答案 0 :(得分:1)
也许较短的版本可以在Machine2
上使用:
cd project2
git init .
git remote add origin /url/of/remote/bare/repo
git fetch
git symbolic-ref HEAD refs/heads/master
git status
git symbolic-ref HEAD
refs / heads / master适用于" swithing branch without checkout",以免弄乱您可能对Machine2
进行的本地修改。
然后git状态可以告诉你当前工作树(此时未受影响)与索引的区别。
答案 1 :(得分:1)
git init
git add
git commit
git remote add origin [remote repo url]
git pull --rebase origin master
git push --set-upstream origin master
这会给你留言:
Branch master set up to track remote branch master from origin.
Everything up-to-date
没有历史记录会被发送! (就像你看到的合并历史一样)
请注意,git pull
在一个命令中实际上是git fetch; git merge
以方便使用。您不想合并,因此您需要选择实际为git pull --rebase
的rebase策略git fetch; git rebase
。
现在你应该是最新的。您现在想要通过标准惯例进行任何更改。
注意:实际上并没有“更方便”的方法,这种方式违反了git的目的。如果机器B有机器A的精确副本,那么只删除所有文件,然后进行克隆是什么危害?
答案 2 :(得分:1)
我有类似的情况:除了.git目录之外的所有源代码。这对我有用:
git init
git remote add origin ssh://...
git fetch
git add .
git checkout master
这样就不需要提交了。
此外,您可以
而不是重置git checkout -f master