Git添加远程并推送到

时间:2014-11-06 14:53:40

标签: git

我无法从克隆版中更新分叉的裸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分支。

我做错了什么?

2 个答案:

答案 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>的快捷方式: