Git基本操作
Git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull
工作区:就是你在电脑里能看到的目录。
暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
本地仓库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的本地仓库。
远程仓库:远程 Git 的版本库。

说明
- workspace:工作区
- staging area:暂存区/缓存区
- local repository:版本库或本地仓库
- remote repository:远程仓库
使用
- 在工作目录下,右键点击Git Bash Here 进入命令窗口


- 在工作目录下,右键点击Git Bash Here 进入命令窗口
创建仓库
git init
创建本地仓库命令,一般项目开发在公司Git仓库管理平台创建仓库,项目成员使用git clone 创建本地仓库。
命令格式:
$ mkdir demo01
$ cd demo01/
$ git init
Initialized empty Git repository in D:/workspace/Yuegao/git_pro/Git_Test_02/demo01/.git/
git clone
项目成员使用git clone 拷贝一个 Git 仓库到本地。
命令格式
$ git clone http://172.16.214.15:3000/wangyf/GIT_Test_flow_01.git

分支管理
几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
常用命令:git branch、git checkout 、git merge
创建分支命令:
git branch (branchname)
切换分支命令:
git checkout (branchname)
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容。
合并分支命令:
git merge
git branch
列出分支基本命令:
git branch

创建分支命令:
git branch br_test_3
以当前分支为基础创建br_test_3分支 
删除分支命令:
git branch -d br_test_3

git checkout
切换分支命令:
git checkout br_test_1
从develop分支切换至br_test_1分支 
创建并切换分支命令:
git checkout -b br_test_3 develop
以develop分支为基础创建br_test_3分支,并切换至br_test_3分支 
git merge
一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用以下命令将任何分支合并到当前分支中去:
合并分支命令:
git merge br_test_1
如下所示,将br_test_1分支的代码合并至develop分支 


合并冲突: 合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。
如下所示,develop分支和br_test_1分支修改了同一处代码,合并发生冲突。 修改冲突部分的代码,提交。 



提交与修改
Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。
常用命令:git add、git status、git diff、git commit
其他命令:git reset
git add
git add 命令可将该文件添加到暂存区。
添加一个或多个文件到暂存区:
git add [file1] [file2] ...
添加指定目录到暂存区,包括子目录:
git add [dir]
添加当前目录下的所有文件到暂存区:
git add .
git status
git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。
git status

通常我们使用 -s 参数来获得简短的输出结果:
git status -s

上图中MM表示,修改了main.py,添加到缓存后,又修改了main.py
git diff
git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。
git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。
git diff

如上图所示,git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 一行一行地显示这些改动具体是什么。
git commit
git commit 命令将暂存区内容添加到本地仓库中。
提交暂存区到本地仓库中:
git commit -m [message]
[message] 可以是一些备注信息。

git commit
填写详细的备注信息。
命令执行后会进入vim备注编辑界面,“i”键进入编辑,“Esc”退出编辑,“:wq”+“Enter”保存并退出。 


git reset
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
git reset [HEAD]

--soft 参数用于回退到某个版本:
git reset --soft HEAD
$ git reset --soft HEAD~3 # 回退上上上一个版本
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
git reset --hard HEAD
$ git reset –hard HEAD~3 # 回退上上上一个版本
$ git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
注意:谨慎使用 –hard 参数,它会删除回退点之前的所有信息。
HEAD 说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
以此类推...
可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
以此类推...
git reset HEAD 命令用于取消已缓存的内容。
如图所示,编辑mo.py和tool.py提交至缓存区,取消mo.py缓存内容,commit只会提交tool.py的内容。


标签管理
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。
比如说,我们想为我们的 XXXX 项目发布一个"1.0.0"版本。 我们可以用 git tag -a v1.0.0 命令给最新一次提交打上(HEAD)"v1.0.0"的标签。
-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是什么时候打的,什么人打的,也不会让你添加个标签的注解。
打标签命令:
git tag v1.2.0
git tag -a v1.2.1

查看标签命令:
git tag
git tag -n

标签推送至远程仓库命令:
git push origin V1.2.1

远程操作
操作远程仓库 常用命令:git pull、git push
git pull
git pull 命令用于从远程获取代码并合并本地的版本。
git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。 命令格式如下:
git pull <远程主机名> <远程分支名>:<本地分支名>
将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。
git pull origin master:brantest
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin master
注意:开发过程中建议pull操作只用于 同一分支从远程分支同步代码 使用, 如需要合并两个不同分支,将两个分支的远程分支分别pull到本地,在本地进行合并。
git push
git push 命用于从将本地的分支版本上传到远程并合并。
git push <远程主机名> <本地分支名>:<远程分支名>
以下命令将本地的 feature/module_01 分支推送到 origin 主机的 feature/module_01 分支。
git push origin feature/module_01

