关于工做中Git相关的总结

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

 

1. 开发模式:服务器

  也了解过,其实部门内部基本上都是分支开发的模式,不多有人作主干开发,这样的好处也是能够保证主干的可持续发布(主干好像是被发布服务Odin接管了)。那如今基本的开发模式(对于我这个单用户来讲),是这样的:ide

  可能有些麻烦,可是这样能够保证每次dev更新能够及时合并到本地,而且加了本地dev就不须要远端merge以后马上拉最新的代码。固然远端会有不少分支,以后开发的版本多了,功能多了,这个图还会再作调成,本地可能也会多一些分支作不一样的模块修改。工具

 

2. 基本命令fetch

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

 

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

查看远程分支
  加上-a参数能够查看远程分支,远程分支会用红色表示出来(若是你开了颜色支持的话):
$ git branch -aspa

删除远程分支
在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是个设计很是有意思而且东西不少的工具,本身了解的仍是很浅显,这只是做为本身的一个命令收录吧,以后用到其余的会不断更新。

相关文章
相关标签/搜索