Git在路上 - 推送错误'[远程拒绝]主 - > master(分支目前正在检出)'

时间:2013-07-31 03:51:32

标签: git offline git-checkout

假设我和朋友在路上,我们离开了裸git存储库。 我有一个工作副本(带.git文件夹),我的朋友想帮助我,所以他从我的工作副本克隆我的git存储库并自己工作,当然这两个副本都是结帐,所以基本上我不能提交,他可以直到我们其中一个人成为分支才推。有一个更好的方法吗?有没有办法没有我们当地的主人结账?我想我总是可以在本地创建一个裸git,我们两个都可以指向它,但这似乎有点过于杀戮。 目标是让他轻松地将他的变化合并到我的,然后当我在线时,我会承诺所有这些。

3 个答案:

答案 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://...做同样的事,但你已经找到了那个部分。

容易!