假设我和朋友在路上,我们从裸 git 存储库离线。我有一个工作副本(带有 .git 文件夹),我的朋友想帮助我,所以他从我的工作副本中克隆了我的 git 存储库并自行工作,当然两个副本都是结帐所以基本上我不能提交,他可以在我们中的一个人建立分支之前不要推动。有一个更好的方法吗?有没有办法不让我们的本地主结帐?我想我总是可以在本地创建一个裸 git,我们都可以指向它,但这似乎有点过分杀戮。目标是让他轻松地将他的更改合并到我的更改中,然后当我在线时,我将提交所有这些。
3 回答
问题中缺少一些细节,但无论如何我都会尝试回答。首先,如果你们都有自己的 repo 副本,那么你们都应该能够将更改提交到自己的本地副本。
如果您的朋友正试图将他的更改推送到您的本地存储库,听起来它不起作用,因为您当前已经master
签出,这作为一项安全功能是有意义的......您不希望 Git 默默地换掉您的工作副本就在你的眼皮底下,没有任何警告。master
您可以通过直接检查它所在的提交来允许 Git 移动您的分支/引用/标签/指针:
$ 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
@cupcake 的回答很好,但是在你的机器上设置一个裸仓库并没有什么大不了的,它充当你和你朋友的中央远程存储库。它实际上要简单得多,并且一旦设置好就可以让生活更轻松:
准备新的裸存储库
mkdir newrepo
cd newrepo
git init --bare
回到你现有的仓库:
git remote add new_repo_alias /path/to/newrepo
git push new_repo_alias something
您的朋友使用 也是如此ssh://...
,但您已经弄清楚了那部分。
简单的!
只是不要使用推送。将彼此添加为远程并使用 git fetch/merge、cherry-pick、rebase 或任何您认为合适的方式来吸引彼此的贡献。