我无法从克隆版中更新分叉的裸Git存储库的分支 原来裸Git存储库。
创建一个裸Git存储库repo0.git
并在repo0
中克隆它:
ROOT=$PWD
git init --bare repo0.git
git clone repo0.git
工作repo0
,然后转到repo0.git
:
cd $ROOT/repo0
echo 'First line' > foo
git add foo
git commit -m 'foo: First line'
git push origin master
将repo0.git
分叉到repo1.git
:
cd $ROOT
git clone --bare repo0.git repo1.git
git clone repo1.git
在repo1
工作,然后转到repo1.git
:
cd $ROOT/repo1
echo 'Second line' >> foo
git add foo
git commit -m 'foo: Second line'
git push origin master
在repo0
中,添加remo1.git
并获取它:
cd $ROOT/repo0
git remote add repo1 $ROOT/repo1.git
git fetch repo1
为远程跟踪分支创建跟踪分支repo1-master
repo1/master
:
git checkout -b repo1-master repo1/master
# output:
Branch repo1-master set up to track remote branch master from repo1.
Switched to a new branch 'repo1-master'
确认repo1-master
是跟踪分支
远程跟踪分支repo1/master
:
git branch -a -vv
# output:
master 107e940 [origin/master] foo: First line
* repo1-master 801d0ca [repo1/master] foo: Second line
remotes/origin/master 107e940 foo: First line
remotes/repo1/master 801d0ca foo: Second line
在repo1-master
分支上工作:
echo 'Third line' >> foo
git add foo
git commit -m 'foo: Third line'
确认repo1-master
仍然是跟踪分支
远程跟踪分支repo1/master
:
git branch -a -vv
# output:
master 107e940 foo: First line
* repo1-master 126d61c [ahead 1] foo: Third line
remotes/origin/master 107e940 foo: First line
remotes/repo1/master 801d0ca foo: Second line
推送至repo1.git
:
git push repo1 repo1-master
# output:
...
To (...)/repo1.git
* [new branch] repo1-master -> repo1-master
推送会在repo1-master
上创建一个新分支repo1.git
,而不是。{
按我的意愿更新master
上的repo1
分支。
我做错了什么?
答案 0 :(得分:1)
我认为您需要设置push.default
。
git config push.default upstream
来自git docs:
push.default定义git push应该采取的操作,如果没有refspec 明确给出。不同的值非常适合特定的 工作流程;例如,在纯粹的中心工作流程中(即获取 source等于推送目的地),上游可能是什么 你要。可能的值有:
什么都没有 - 除非refspec是,否则不要推送任何东西(错误输出) 明确给出。这主要是针对想要避免的人 总是明确的错误。current - 推送当前分支以使用相同的更新分支 接收端的名称。适用于中央和非中央 工作流程。
上游 - 将当前分支推回到其更改的分支 通常集成到当前分支(称为 @{上游})。这种模式只有在你推动时才有意义 您通常会从中获取相同的存储库(即中央工作流程)。
简单 - 在集中式工作流程中,像上游一样添加工作 如果上游分支的名称不同,则拒绝推送的安全性 来自当地的。当推到与遥控器不同的遥控器时 通常来自,作为当前工作。这是最安全的选择 适合初学者。
此模式将成为Git 2.0中的默认模式。
匹配 - 推送两端具有相同名称的所有分支。这个 使您正在推动的存储库记住分支集 这将被推出(例如,如果你总是推动maint和master 那里没有其他分支,你推送的存储库将有 这两个分支,你的当地maint和master将被推动 有)。
答案 1 :(得分:1)
要将分支推送到其配置的跟踪分支,只需键入
即可git push
git push <remote> <branchname>
实际上是git push <remote> <branchname>:<branchname>
的快捷方式: