zoukankan      html  css  js  c++  java
  • 关于工作中Git相关的总结

      来公司一周多,主要是在熟悉各种环境和流程,而作为研发来讲,git的使用也是必不可少的。以前使用方式单一,几个人对着master,pull和push,来了之后发现其实在日常的开发中,git可以很方便的帮我们进行分工和合并,这里总结一些平时可能会用到的命令和要点:

    1. 开发模式:

      也了解过,其实部门内部基本上都是分支开发的模式,很少有人做主干开发,这样的好处也是可以保证主干的可持续发布(主干好像是被发布服务Odin接管了)。那现在基本的开发模式(对于我这个单用户来说),是这样的:

      可能有些麻烦,但是这样可以保证每次dev更新可以及时合并到本地,并且加了本地dev就不需要远端merge之后立刻拉最新的代码。当然远端会有很多分支,之后开发的版本多了,功能多了,这个图还会再做调成,本地可能也会多一些分支做不同的模块修改。

    2. 基本命令

      pull:这个是远程仓库拉取数据到本地仓库,就是为了和远程仓库所匹配
      commit:当我们想要把自己的代码想要提交到远程的时候,所用的命令行语句,由于我们修改所在的区域在暂存区
      我们首先要把自己的代码commit(提交)到本地仓库,然后在从本地仓库push到远程仓库,但是切记住一点,我们如果每一次在commit的时候,我们都需要先从线上pull最新的代码到本地仓库,然后在把暂存区里面的代码提交到本地仓库,这个时候如果没有冲突固然是最好的,如果有了冲突,这我需要解决冲突,这个此时本地仓库已经是最新的代码
    且又包括暂存区上面的代码了。
      push:这个就是我们前面把代码提交到了本地,如果我们需要提交到远程服务器上,需要把代码push到远程的分支里面。(git push origin local_branch:remote_branch
      merge:如果有两个分支里面的代码在同一个区域中(两个同时隶属于暂存区,或本地仓库,或远程仓库),这个时候需要把这个两个分区合并。
     
    补充:
      每次自己的代码更新之后,晚上最好都推到自己的分支上去,及时更新!
      远程分支就是本地分支push到服务器上的时候产生的。比如master就是一个最典型的远程分支(默认)。

    3. Git查看、删除远程分支

    查看远程分支
      加上-a参数可以查看远程分支,远程分支会用红色表示出来(如果你开了颜色支持的话):
    $ git branch -a

    删除远程分支
    在Git v1.7.0 之后,可以使用这种语法删除远程分支:
    $ git push origin --delete <branchName>

    否则,可以使用这种语法,推送一个空分支到远程分支,其实就相当于删除远程分支:
    git push origin :<branchName>

    两种语法作用完全相同。

    4. git log命令

      git log --graph --decorate --oneline --simplify-by-decoration --all
    说明:
      --decorate 标记会让git log显示每个commit的引用(如:分支、tag等) 
      --oneline 一行显示
      --simplify-by-decoration 只显示被branch或tag引用的commit
      --all 表示显示所有的branch,这里也可以选择,比如我指向显示分支ABC的关系,则将--all替换为branchA branchB branchC
      
      这个可以很清楚的显示,当然这两天用了idea查看发现IDE显示的更清晰。。
     
    5. git 对比两个版本之间差异

      比如我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式:

      - 查看 dev 有,而 master 中没有的:git log dev ^master
      - 同理查看 master 中有,而 dev 中没有的内容:git log master ^dev

      - 查看 dev 中比 master 中多提交了哪些内容:git log master..dev
      - 不知道谁提交的多谁提交的少,单纯想知道有什么不一样:git log dev...master
     
      - 在上述情况下,再显示出每个提交是在哪个分支上:git log --left-right dev...master
     
    6. git merge 和 git rebase 
      之前知道git pull 等于 git fetch + git merge,但是今天看到rebase的命令,还是和merge很像的,两个都是用来合并两个分支用的,在使用过程中,这两个概念容易混淆。
      然后这篇博文写的很清楚:http://www.jianshu.com/p/c17472d704a0
      但是其实开发中我主要还是用的merge,还是要深刻理解下吧。

    7. git reset --hard,--soft,--mixed

    reset命令做的事情就是重置HEAD(当前分支的版本顶端)到另外一个commit。

    举例:

       (F)
    A-B-C
        ↑
      master

    a. 输入git reset --hard,结果会变成:

     (F)
    A-B
      ↑
    master

     C 状态彻底没有,再也找不回来。所以,没事不要用这个命令。

    b. 输入了git reset --soft,结果是:

     (F)
    A-B-C
      ↑
    master

    文件状态与分支的指针都指向上一个提交,C 还是在的,只是没显示。

    c. 输入 git reset --mixed,结果是:

       (F)
    A-B-C
      ↑
    master

    分支指针指向上次提交点,但是文件状态还是在当前文件 C ,我看到的现象就是 C 文件还在,但是没有 add ,是红色的。 
    可以看出,三个命令中 mixed 是最好的回退处理方式,其实这也是 git reset 的默认参数。

    8. git stash ,git stash pop 

      git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了fix 一个紧急的bug,  先stash, 使返回到自己上一个commit, 改完bug之后再stash pop, 继续原来的工作。

    写在最后:其实慢慢发现git是个设计非常有意思并且东西很多的工具,自己了解的还是很浅显,这只是作为自己的一个命令收录吧,之后用到其他的会不断更新。

  • 相关阅读:
    七. 多线程编程3.主线程
    七. 多线程编程1.线程的概念
    六. 异常处理12.断言
    liunx 安装 mysql 5.6
    idea Unable to open debugger port (127.0.0.1:58006) Address already in use: JVM_Bind 的解决办法
    liunx 安装redis 4.0
    liunx 安装jdk1.8
    idea 去除xml文件sql语句背景色
    改变数据库和表编码
    mybatis 按in 函数参数顺序排序
  • 原文地址:https://www.cnblogs.com/protected/p/7391242.html
Copyright © 2011-2022 走看看