git的使用以及常用命令、场景

# Git简介

## Git是什么?

Git(读音为/g?t/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 

Git 是 [Linus Torvalds](https://baike.baidu.com/item/Linus Torvalds/9336769) 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git是目前世界上最先进的分布式版本控制系统。

![git](./assets/git.jpeg)



#### 优点:

适合[分布式开发](https://baike.baidu.com/item/分布式开发),强调个体。

公共服务器压力和数据量都不会太大。

速度快、灵活。

任意两个开发者之间可以很容易的解决冲突。

离线工作。

#### 缺点:

资料少(起码中文资料很少)。

学习周期相对而言比较长。

不符合常规思维。

代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
 
# 常用Git命令

## 分支操作:

#### git clone

git clone 代码库的url

将线上库克隆到本地

#### git add

将工作区的修改提交到暂存区

#### git commit

将暂存区的文件或目录提交到版本库区

#### git push

将提交到本地库中的内容推送到远程库中

#### git pull

拉取远程分支代码

#### git branch 分支名

创建本地分支

#### git branch 

查看所有分支

#### git checkout -b 分支名

创建本地分支并切换到分支

#### git checkout 分支名

切换分支

#### git checkout -d 分支名

删除分支

#### git merge 分支名

在当前分支合并XX分支



## 版本管理:

#### git status

查看状态 

#### git add 文件/文件夹 

添加到暂存区

#### git checkout --文件名

放弃修改操作

#### git commit "备注信息"

添加到本地分支

#### git log

查看历史版本(想看简洁版的带上参数,--pretty=online)

#### git reset 版本号

回退历史版本 

#### git reflog

查看历史操作

#### git diff 文件名

查看文件的修改
# Git运用场景

#### 场景一:

?       当你正在写代码的时候突然线上服务器出现了个bug,这时候你不得不赶快处理线上的bug。一般我们会将正在写的代码,git add, git commit 一下,再切换到bug分支解决bug。解决完成以后git commit bug分支的代码。在切换回来。除了这样的操作,我们还有一种可选方案:

  1.正在写东西,突然有bug需要解决。

      git stash    #将当前的代码放在一个新的临时区/暂存区。以免带入其他分支。

      git checkout bug    #切换到bug分支

      vim views.py      #修改代码,解决bug

      git add views.py    #添加修改内容到暂存区

      git commit "change_bug"  #提交代码到本地仓库

      git checkout master   #切换都master分支

      git merge bug      #将bug分支的修改后的代码合并到master上

      git push origin master  #将本地master分支的代码推到远程

      git checkout dev    #切换到修改代码前的分支(原来的代码在dev分支上写的)

      git status        #查看dev分支的状态,发现原来对代码的修改没有了(写了半天,没有保存,心里很慌有没有啊。。。)

      more readme       #查看更久远的操作,发现依然没有。(这是真的有点慌,甚至有点小绝望啊)   

      git stash list        #查看临时保存的文件列表(我擦,找到了,过山车般的体验)

      git stash apply      #恢复到上次保存的位置(终于找到你,还好我没放弃)

      git status        #查看状态,发现一切和好如初(这个世界完美了。可以继续愉快的写代码了)

    git stash的一些其他操作:

      git stash drop    #删除最久的那个使用了git stash 保存的临时状态

      git stash apply {0}    #恢复到指定的那个临时状态

      git stash pop    #恢复并删除上一个临时状态

      (ps: 1.git stash apply 恢复后,stash内容并不会删除,需要使用git stash drop 来删除

         2.另一种方式是使用git stash pop, 删除的同时把stash的内容也删除了)





#### 场景二:

  多人合作开发,最后把所有人的代码合并到一起,然后测试并推到master中:

      git add *  git commit "success"      #将完成的代码添加到本地仓库,等待合并

      checkout maste    #切换到本地master分支

      git pull        #将远程master分支的代码下载到本地

      git merge dev     #将本地dev中开发的代码合并到master中(这时候发现有冲突。自己的代码和master里最新的代码有不一致的地方,不要慌,我和别人同时修改了原文代码导致的这种问题。下面需要进行手动合并。)

      git status        #查看文件状态,看都有哪些文件有冲突

      git diff views.py    #查看文件冲突的具体情况

      vim views.py      #手动修改文件

      git add views.py  git commit "change_merge"  #添加到本地仓库

      git push origin master    #推送到远程master分支