如何将源自先前提交的新本地分支的提交同步到远程存储库?

时间:2017-05-09 10:20:38

标签: git version-control

在我的本地存储库中,我使用该提交的SHA从先前的提交创建了一个新分支。接下来的步骤:

git checkout <sha of some previous commit>
git branch new_branch

之后,我对new_branch进行了更改并完成了我的工作。

现在,我想将这个新创建的分支推送到我的远程存储库(Bitbucket)。为此,我在bitbucket上创建了一个名为new_branch的新分支。

之后,我尝试将我的本地new_branch的更改推送到使用:

git push -u origin new_branch

但是有以下错误:

>  ! [rejected]        new_branch -> new_branch (non-fast-forward) 
> error: failed to push some refs to
> '<url to my repo>' hint:
> Updates were rejected because the tip of your current branch is behind
> hint: its remote counterpart. Integrate the remote changes (e.g. hint:
> 'git pull ...') before pushing again. hint: See the 'Note about
> fast-forwards' in 'git push --help' for details.

有一个错误,因为两个分支都来自不同的提交。我知道在远程存储库(bitbucket)上创建new_branch是不正确的方法。

我们如何在远程存储库(bitbucket)中创建一个新分支,该分支与从先前提交创建的本地分支同步?

感谢。

解决方案

  1. 我从Bitbucket删除了分支new_branch

  2. git push origin HEAD

  3. 注意:git push origin new_branch出现以下错误:

      

    错误:src refspec new_branch与any匹配。

3 个答案:

答案 0 :(得分:0)

  
    

! [已拒绝] new_branch - &gt; new_branch(非快进)
    错误:无法将某些引用推送到

  

您无需在GitHub中创建分支。只需推送您的本地分支(如果不存在,将自动创建新分支)。

从此处创建另一个分支并推送到远程。

$ git checkout -b new_branch2
$ git push origin HEAD         # push local new_branch2 = HEAD to remote

答案 1 :(得分:0)

>  ! [rejected]        new_branch -> new_branch (non-fast-forward) 
> error: failed to push some refs to

如果这确实是输出,那么对于您的本地分支new_branch,远程分支new_branch已经存在并且它们不兼容。

根据您创建本地分支的方式,我实际上并不确定您是否曾进入过该分支。检查提交哈希将使您进入分离的HEAD。然后,您在该提交上创建了一个分支,但您从未切换到它。因此,您的原始步骤在提交之前应该有git checkout new_branch。 (请注意,您可以使用git checkout -b new_branch <commit-hash>

创建指向提交哈希的新分支
  

为此,我在bitbucket上创建了一个名为new_branch的新分支。

你究竟是怎么做到的?毕竟,分支是通过向他们推送来创建的。因此,为了创建分支,您可能会向其推送其他内容 - 这可以解释为什么您的实际本地分支与远程分支不兼容。

我建议您使用git fetch将远程的完整状态转换为本地分支,然后查看完整的历史记录和所有分支(例如使用gitk --all)。这样你就可以理解究竟发生了什么以及分支指向的位置。

如果您最终搞清楚,远程new_branch只是master的副本(例如),那么您可以强行将本地new_branch推送到它替换远程状态。否则,您可能希望创建另一个本地分支,以通过正确合并更改来修复所有内容。

答案 2 :(得分:0)

如您所知,bitbucket上的创建new_branch不正确,因为new_branch已从最新提交中检出,而不是您指定的提交。

要与远程同步,您应该将本地new_branch直接推送到bitbucket。所以你应该这样:

  1. 删除您在bitbucket上创建的分支
  2. git push -u origin new_branch
  3. 这会自动在bitbucket上创建new_branch并设置本地new_branch和远程new_branch之间的跟踪关系。