V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
csensix
V2EX  ›  问与答

git分支合并操作

  •  
  •   csensix · 2013-09-25 11:08:58 +08:00 · 4609 次点击
    这是一个创建于 4105 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有两个分支:master和dev,在一台电脑上把dev合并到master上,并推送至远程仓库。另一台电脑上也有master和dev两个分支,先进入master,git pull一次,获取了合并后的master。然后切换到dev,修改文件,提交,git push的时候出问题了。

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

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

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

    dev 也要 pull 吧
    cloudzhou
        4
    cloudzhou  
       2013-09-25 11:14:36 +08:00
    出了什么问题呢,没看明白,如果你是固定分支开发的话,在 dev合并到master 之后,也应该把 master合并回dev 也就是保持 dev 和 master 的同步,然后在 dev 上接着开发,这样没有什么问题的
    csensix
        5
    csensix  
    OP
       2013-09-25 11:17:05 +08:00
    @cloudzhou 那估计我应该再把master合并到dev上。这样的话,是否能够保证项目一直存在两个分支?
    cloudzhou
        6
    cloudzhou  
       2013-09-25 11:25:11 +08:00
    @csensix 你的话我看不明白,什么叫:是否能够保证项目一直存在两个分支?分支非常灵活,创建和删除都是非常便捷的,我的开发习惯是一个 feture或者bugfix 都新开一个分支,然后合并到master,如果你是固定分支的话,可以一直保留 dev,所有人的新的开发都从 master 分支 checkout 下来,然后集体合并到 dev,dev分支最后做测试和回归,觉得通过之后再合并到 master
    johnnyb
        7
    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
        8
    csensix  
    OP
       2013-09-25 11:40:56 +08:00
    @cloudzhou 谢谢!我的意思就是和johnnyb说的一样,master是肯定存在的,同时保留dev,平时的开发都在dev上进行,觉得到了一定阶段可以往外推出的时候再合并到master上,之后又继续在dev上做开发。刚才按你的方法试了一下:把master合并到dev上,一切都正常了。
    9hills
        9
    9hills  
       2013-09-25 11:45:47 +08:00
    @csensix 不建议把master merge到dev上,而是rebase到dev上

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

    在dev上 git rebase master才是正道
    csensix
        10
    csensix  
    OP
       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
        11
    csensix  
    OP
       2013-09-25 11:46:57 +08:00
    @9hills 是的,现在的项目网络图有点混乱了。要是早点知道用rebase就好了。不过还是谢了哈!
    pengphy
        12
    pengphy  
       2013-09-25 11:51:39 +08:00   ❤️ 1
    csensix
        13
    csensix  
    OP
       2013-09-25 11:59:01 +08:00
    @pengphy Mark了,貌似不错,找时间看看。thx
    johnnyb
        14
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2316 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:02 · PVG 00:02 · LAX 08:02 · JFK 11:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.