Git入门之多人协作

Git多人协作

  1. 查看远程分支

    $ git remote
    origin
    $ git remote -v    #显示的信息更详细
    origin  git@github.com:michaelliao/learngit.git (fetch)
    origin  git@github.com:michaelliao/learngit.git (push)
    

    上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

  2. 推送分支

    推送时指定本地分支

    $ git push origin master
    $ git push origin dev
    
    • master是主分支,要时刻与远程同步
    • dev是开发分支,团队成员都要在上面工作,也需要与远程同步
    • bug分支只在本地修复bug,没必要推送远程
    • feature分支是否推送,取决于你是否和你的小伙伴合作在上面开发
  3. 抓取分支

    下面模拟一下你的小伙伴,另一台电脑(把SSH Key 添加到GIT CODE)或同一电脑的另一个目录下克隆:

    $ git clone git@gitcode.net:codechina/learngit.git
    

    此时默认情况下只能看到本地的master分支,开发时需要创建远程origindev分支到本地,用以下命令:

    $ git checkout -b dev origin/dev
    

    dev上修改后即可将dev分支 push到远程:

    $ git add env.txt
    $ git commit -m "add env"
    $ git push origin dev
    

    你的小伙伴向origin/dev分支推送了提交,若此时你也对同样的文件做了修改并试图提交:

    $ cat env.txt
    $ git add env.txt
    $ git commit -m "Update env.txt"
    $ git push origin dev
     ! [rejected]        dev -> dev (non-fast-forward)
    error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
    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.
    

    推送失败,与你小伙伴的提交有冲突:先用git pull把最新的提交从origin/dev抓下来,在本地合并解决冲突后再推送:

    $ git pull
    There is no tracking information for the current branch.
    Please specify which branch you want to merge with.
    See git-pull(1) for details.
    
        git pull <remote> <branch>
    
    If you wish to set tracking information for this branch you can do so with:
    
        git branch --set-upstream-to=origin/<branch> dev
    

    没有指定本地dev分支与远程origin/dev分支的链接,根据提示设置devorigin/dev的链接:

    $ git branch --set-upstream-to=origin/dev dev
    
    $ git pull
    

    此时推送成功,但是合并会有冲突,要手动解决(解决方法和分支管理中的解决冲突完全一样)。解决后再提交,再push:

    $ git commit -m "fix env conflict"
    $ git push origin dev
    
  4. 多人协作小结

    多人协作的工作模式通常为:

    1. git push origin <branch-name>推送自己的修改;
    2. 如果推送失败,要先用git push试图合并;
    3. 合并出现冲突,解决冲突并在本地提交
    4. git push origin <branch-name>推送即可成功

    如果git pull提示no tracking information,说明本地分支与远程分支没有创建链接关系

    使用命令git branch --set-upstream-to <branch-name> origin/<branch-name>.

  5. git rebase

    在上面多人在同一分支协作时,经常需要解决冲突,最终导致分支会很乱,如下:

    $ git log --graph --pretty=oneline --abbrev-commit
    *   f4e7ea8 (HEAD -> master) Merge branch 'dev' into master
    |\
    | *   ad728db (origin/dev, dev) fix env conflict
    | |\
    | | * d7e6866 Update env.txt
    | * | 770ce3f new env
    | |/
    | * 34bde7f add env
    | * 0944c8c fix bug 101
    * |   b003293 (origin/master) merged bug fix 101
    |\ \
    | * | 8842ff5 (issue-101) fix bug 101
    |/ /
    * | fc76cf7 merge with no-ff
    |\|
    | * c7b409a add merge
    |/
    *   fb8b190 conflict fixed
    

    rebase的操作则可以将这些分叉的提交变成直线

    $ git rebase
    

    然后用git log查看就发现分叉的提交变成直线了,最终的提交结果不会发生改变,但是会修改本地的分叉提交。推送到远程之后,查看效果也是一条直线。

    $ git push origin master
    $ git log --graph --pretty=oneline --abbrev-commit
    

    以上就是 rebase 的详细介绍了,现在让我们来回顾一下:

    1. rebase操作可以把本地未push的分叉提交历史整理成直线
    2. rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺平的小菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值