Git在路上-推送错误';[远程拒绝]主机->;master(分支机构当前已签出)和#x27;
假设我和一个朋友在路上,我们从裸git存储库离线。 我有一个工作副本(使用.git文件夹),我的朋友想帮我,所以他从我的工作副本克隆了我的git存储库,并独立工作,当然这两个副本都是签出的,所以基本上我不能提交,他不能推送,直到我们中的一个分支。有更好的方法吗?有没有办法不让我们的本地主结账?我想我总是可以在本地创建一个裸git,我们都可以指向它,但这似乎有点过分了。Git在路上-推送错误';[远程拒绝]主机->;master(分支机构当前已签出)和#x27;,git,offline,git-checkout,Git,Offline,Git Checkout,假设我和一个朋友在路上,我们从裸git存储库离线。 我有一个工作副本(使用.git文件夹),我的朋友想帮我,所以他从我的工作副本克隆了我的git存储库,并独立工作,当然这两个副本都是签出的,所以基本上我不能提交,他不能推送,直到我们中的一个分支。有更好的方法吗?有没有办法不让我们的本地主结账?我想我总是可以在本地创建一个裸git,我们都可以指向它,但这似乎有点过分了。 他的目标是让他轻松地将自己的更改合并到我的更改中,然后当我在线时,我将提交所有这些更改 不要用推。以远程方式相互添加,并使用gi
他的目标是让他轻松地将自己的更改合并到我的更改中,然后当我在线时,我将提交所有这些更改 不要用推。以远程方式相互添加,并使用git fetch/merge、cherry pick、rebase或任何您认为合适的方法来拉入彼此的贡献。只是不要使用推送。将彼此添加为远程,并使用git fetch/merge、cherry pick、rebase或任何您认为合适的方法来获取彼此的贡献。问题中缺少一些细节,但我将尝试回答。首先,如果你们都有自己的回购协议副本,那么你们都应该能够将更改提交给自己的本地副本 如果您的朋友试图将其更改推送到您的本地回购协议,这听起来好像不起作用,因为您当前已签出
master
,这将是一项安全功能……您不会希望Git在没有警告的情况下悄悄地从您的鼻子底下调出您的工作副本。您可以通过直接签出Git所在的提交,允许Git移动您的主机分支/引用/标签/指针:
$ git checkout head
然后你的朋友可能会把他的变化推到你的回购协议上。完成后,确保在本地回购中再次签出主分支机构
(如果您想处理它):
然而,人们通常不会推动他人个人/私人回购协议的变更。他们通常互相发送请求,取而代之的是fetch
。因此,您可以添加朋友的遥控器和获取
他的更改,然后合并
这些更改(或拉动
以同时执行这两项操作):
$git add
$git获取
$git合并/主
#或者使用pull组合获取和合并
$git拉动主机
或者,您可以在好友更改的基础上重新设置本地更改的基础,而不是将好友的更改提取并合并(或拉入)到本地master
分支:
$git fetch
$git rebase/master
这个问题缺少一些细节,但无论如何我都会尝试回答。首先,如果你们都有自己的回购协议副本,那么你们都应该能够将更改提交给自己的本地副本
如果您的朋友试图将其更改推送到您的本地回购协议,这听起来好像不起作用,因为您当前已签出master
,这将是一项安全功能……您不会希望Git在没有警告的情况下悄悄地从您的鼻子底下调出您的工作副本。您可以通过直接签出Git所在的提交,允许Git移动您的主机分支/引用/标签/指针:
$ git checkout head
然后你的朋友可能会把他的变化推到你的回购协议上。完成后,确保在本地回购中再次签出主分支机构
(如果您想处理它):
然而,人们通常不会推动他人个人/私人回购协议的变更。他们通常互相发送请求,取而代之的是fetch
。因此,您可以添加朋友的遥控器和获取
他的更改,然后合并
这些更改(或拉动
以同时执行这两项操作):
$git add
$git获取
$git合并/主
#或者使用pull组合获取和合并
$git拉动主机
或者,您可以在好友更改的基础上重新设置本地更改的基础,而不是将好友的更改提取并合并(或拉入)到本地master
分支:
$git fetch
$git rebase/master
@cupcake的答案很好,但是在你的机器上建立一个裸机回购并没有什么过分的,它可以作为你和你朋友的中央远程存储库。它实际上简单得多,一旦设置完成,生活就会变得更轻松:
准备新的裸存储库
mkdir newrepo
cd newrepo
git init --bare
回到您现有的回购协议:
git remote add new_repo_alias /path/to/newrepo
git push new_repo_alias something
您的朋友也使用ssh://...
,但您已经了解了这一部分
轻松点 @cupcake的答案很好,但是在你的机器上建立一个简单的repo,作为你和你的朋友的中央远程存储库,并没有什么过分的。它实际上简单得多,一旦设置完成,生活就会变得更轻松:
准备新的裸存储库
mkdir newrepo
cd newrepo
git init --bare
回到您现有的回购协议:
git remote add new_repo_alias /path/to/newrepo
git push new_repo_alias something
您的朋友也使用ssh://...
,但您已经了解了这一部分
轻松点 可能相关或重复:。你们两个怎么可能都不能提交到自己的本地克隆?你是说你们两个都不能互相推动改变吗?在Git中,提交和推送是两件截然不同的事情。细节很重要!还有,你的朋友“克隆你的工作副本”是什么意思?不能从工作副本克隆Git回购,因为它们不包含历史记录,只能从其他回购进行克隆。请澄清您的问题。谢谢纸杯蛋糕,我的朋友工作副本是从我的git存储库工作副本。因此,我不能提交,他也可以提交,但他不能将我的工作副本git存储库(对他来说是远程的)推入,因为两者都是签出,所以我们可以通过创建一个分支使其按照指定的方式工作,但这似乎有点过分了。有没有办法不让我的本地工作副本结帐?另一方面,我们尝试了哪种方法效果好