Git合并推

时间:2012-11-28 03:50:52

标签: git github branch push

我是从Git开始的,所以我觉得这个问题可能是一天中最新的问题,因为这个任务很简单,但它引起了一个可怕的头痛......

我有2个本地分支机构:

  • 本地/生产

和2个遥控器:

  • 生产

我需要将本地更改传递给生产。所以,我的工作流程是:

git checkout local/production
git merge master
git commit
git push

git merge: 似乎工作正常,它检测到所有差异。

git commit:

  

在分支本地/生产

上      

您的分支机构领先于原产地/生产部门。由2个提交。

     

无需提交(工作目录清理)

git push:

  

一切都是最新的

所以,我无法将我的更改推送到远程存储库。

1 个答案:

答案 0 :(得分:15)

根本原因:为简短起见,我觉得您的local/production未跟踪origin/production。您可以使用git branch -avv进行检查。

关于git push :请注意,不带参数的git push将更新所有已在本地跟踪分支中更新的远程分支(来自git-push(1)手册页):

git push ...  [<repository> [<refspec>...]]

The special refspec : (or +: to allow non-fast-forward updates) directs git to
push "matching" branches: for every branch that exists on the local side, the
remote side is updated if a branch of the same name already exists on the remote
side. This is the default operation mode if no explicit refspec is found (that is
neither on the command line nor in any Push line of the corresponding remotes
file---see below).

因为如果忘记在本地分支中做了哪些更改,简单git push的结果有时很少出乎意料,我个人喜欢明确指定我想要推送哪些分支。在你的情况下,这似乎是你想要做的:

git push origin local/production:production

如果您希望local/production跟踪origin/production,则可以使用local/production选项为origin/production制作-u跟踪分支:

git push -u origin local/production:production

(仅需要一次)。然后你可以从原点拉到local/production

执行摘要:您需要了解跟踪分支的概念以及git push的特殊语义。

P.S。我想知道您在这里选择的分支名称local/production。为什么不只是production?我怀疑您已经production跟踪origin/production,可能会使用local/production进行本地开发。在这种情况下,合理的工作流程是这样的:

  1. git pull origin production:production将更改提取到production
  2. 如果production中有新的提交,local/production落后,则要local/production production上的production(或local/production merge 1}})
  3. 您希望将更改cherry-pickproduction提交到git push origin production:production,并使用{{1}}推送更改。