假设我和朋友在路上,我们离开了裸git存储库。 我有一个工作副本(带.git文件夹),我的朋友想帮助我,所以他从我的工作副本克隆我的git存储库并自己工作,当然这两个副本都是结帐,所以基本上我不能提交,他可以直到我们其中一个人成为分支才推。有一个更好的方法吗?有没有办法没有我们当地的主人结账?我想我总是可以在本地创建一个裸git,我们两个都可以指向它,但这似乎有点过于杀戮。 目标是让他轻松地将他的变化合并到我的,然后当我在线时,我会承诺所有这些。
答案 0 :(得分:2)
问题中缺少一些细节,但无论如何我都会尝试回答。首先,如果你们都拥有自己的回购副本,那么你们两个都应该能够对你自己的本地副本进行更改。
如果你的朋友试图将他的更改推送到你的本地回购,听起来好像它没有工作,因为你目前已经签出master
,这作为安全功能是有意义的...你不会想让Git在没有任何警告的情况下默默地从你的鼻子下面换掉你的工作副本。您可以通过直接检查它的提交来允许Git移动您的master
分支/引用/标签/指针:
$ git checkout head
然后你的朋友可能会将他的更改推送到你的回购。完成后,请务必在本地仓库中再次检出master
分支(如果您想要处理它):
$ git checkout master
然而,人们通常不会将更改推送给其他人的个人/私人回购。他们通常会相互发送拉取请求,并fetch
互相改变。因此,您可以添加朋友的远程和fetch
他的更改,然后将merge
添加到(或pull
两者中):
$ git add <friend name> <url or path to friend remote>
$ git fetch <friend remote>
$ git merge <friend>/master
# Or combine fetch and merge using pull
$ git pull <friend> master
或者,您可以根据他的更改修改您的本地更改,而不是将您朋友的更改提取并合并(或拉取)到您的本地master
分支中:
$ git fetch <friend remote>
$ git rebase <friend>/master master
答案 1 :(得分:1)
只是不要使用推送。将对方添加为远程并使用git fetch / merge,cherry-pick,rebase或任何你认为合适的其他贡献。
答案 2 :(得分:1)
@ cupcake的答案很好,但是在你的机器上设置一个裸仓库并没有什么不可取之处,它可以作为你和你朋友的中央远程存储库。它实际上简单得多,并且一旦设置就会让生活更轻松:
准备新的裸存储库
mkdir newrepo
cd newrepo
git init --bare
返回现有的仓库:
git remote add new_repo_alias /path/to/newrepo
git push new_repo_alias something
你的朋友使用ssh://...
做同样的事,但你已经找到了那个部分。
容易!