git分支合并操作

2013-09-25 11:08:58 +08:00
 csensix
有两个分支:master和dev,在一台电脑上把dev合并到master上,并推送至远程仓库。另一台电脑上也有master和dev两个分支,先进入master,git pull一次,获取了合并后的master。然后切换到dev,修改文件,提交,git push的时候出问题了。

所以,想问一下大家,dev分支合并到master之后(使用了--no-ff模式合并),怎样才能够继续在dev分支上开发,并保证能够推送到远程仓库。

谢谢!
4452 次点击
所在节点    问与答
14 条回复
xdeng
2013-09-25 11:11:55 +08:00
git 适合敲命令的用户 我还是喜欢界面的
9hills
2013-09-25 11:14:29 +08:00
如果用了--no-ff模式后,master的历史和dev的历史就不同了,这时候需要在dev分支

使用 git rebase master,保证历史和master一致,之后再在dev分支开发就好
lichao
2013-09-25 11:14:32 +08:00
你都说了,git push 时候出问题了,那你看报错信息啊,它会提示你是什么问题,该怎么做

dev 也要 pull 吧
cloudzhou
2013-09-25 11:14:36 +08:00
出了什么问题呢,没看明白,如果你是固定分支开发的话,在 dev合并到master 之后,也应该把 master合并回dev 也就是保持 dev 和 master 的同步,然后在 dev 上接着开发,这样没有什么问题的
csensix
2013-09-25 11:17:05 +08:00
@cloudzhou 那估计我应该再把master合并到dev上。这样的话,是否能够保证项目一直存在两个分支?
cloudzhou
2013-09-25 11:25:11 +08:00
@csensix 你的话我看不明白,什么叫:是否能够保证项目一直存在两个分支?分支非常灵活,创建和删除都是非常便捷的,我的开发习惯是一个 feture或者bugfix 都新开一个分支,然后合并到master,如果你是固定分支的话,可以一直保留 dev,所有人的新的开发都从 master 分支 checkout 下来,然后集体合并到 dev,dev分支最后做测试和回归,觉得通过之后再合并到 master
johnnyb
2013-09-25 11:33:45 +08:00
你应该先把 push 错误信息贴出来。「先进入master,git pull一次,获取了合并后的master。然后切换到dev」,是不是 dev 分支没有push/pull?

另,master 不用合并回 dev 吧,就在一直在 dev 上 commit,然后定期 merge 到 master:

--------c-----f----> master
/ /
--a--b--d--e--g----> dev
csensix
2013-09-25 11:40:56 +08:00
@cloudzhou 谢谢!我的意思就是和johnnyb说的一样,master是肯定存在的,同时保留dev,平时的开发都在dev上进行,觉得到了一定阶段可以往外推出的时候再合并到master上,之后又继续在dev上做开发。刚才按你的方法试了一下:把master合并到dev上,一切都正常了。
9hills
2013-09-25 11:45:47 +08:00
@csensix 不建议把master merge到dev上,而是rebase到dev上

merge到dev上会把历史搞的非常乱。。

在dev上 git rebase master才是正道
csensix
2013-09-25 11:46:06 +08:00
@johnnyb 我遇到的情况就是,把dev合并到master,然后将master推送到远程仓库,在本地切回到dev,执行了pull操作之后开始修改一些东西,commit完之后再push到远程,就报错,信息是:
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

另外,还提示说
there is no tracking information for the current branch

你说的把dev合并到master之后,不用再把master合并回dev,也能够在dev上继续开发,你是怎样操作的?
谢谢!
csensix
2013-09-25 11:46:57 +08:00
@9hills 是的,现在的项目网络图有点混乱了。要是早点知道用rebase就好了。不过还是谢了哈!
pengphy
2013-09-25 11:51:39 +08:00
csensix
2013-09-25 11:59:01 +08:00
@pengphy Mark了,貌似不错,找时间看看。thx
johnnyb
2013-09-25 12:26:38 +08:00
@csensix 我一般是这样操作的:

电脑a:

$ git push # 所有分支

电脑b:
$ git checkout dev
$ git pull # 仅更新当前分支
# 开始工作。。。


看你错误提示是当前分支落后了,所以现在也无法pull,试试在dev分支:

$ git remote update # 获得远程仓库更新
$ git rebase origin dev # 在最新的dev分支上进行演合

---

另外再说下,dev 到 master 应该是单向的吧,再反过来merge/rebase 感觉很乱。

这里有另一篇关于分支策略的文章:
http://www.ruanyifeng.com/blog/2012/07/git.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/83599

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX