文章目录
- 前言
- 一、git基本知识
- 二、git config
- 三、git branch
- 四.git checkout
- 五、git status
- 六、git diff
- 七.git add
- 八、git commit
- 九、git log
- 十、git reset
- 十一、git rm
- 十二、git stash
- 十三、git push
- 十四、git remote
- 十五、git merge
- 结束语
前言
Git是非常棒的代码托管工具,本文主要记录项目中常用的Git指令。针对某一个功能指令只介绍部分参数,其他参数可通过帮助文件查看(比如:git add -h,查看add指令的其他参数说明)。关于Git的安装及基本介绍不再赘述,建议读者有时间可以阅读git官方网站提供的文档资料,系统了解git的前世今生,发现它的美。由于篇幅问题,文章分2篇,本篇主要介绍git常用指令,下一篇主要介绍git的综合应用。本文有pdf版本,可自行下载阅读参考。
一、git基本知识
1.1 工作区与暂存区
    工作区:在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。
    版本库(Repository):工作区有一个隐藏目录.git,这是版本库。版本库保存了很多东西,其中最重要的就是stage(暂存区),还有Git自动创建了第一个分支master,以及指向master的一个指针HEAD。
1.2 从github手动下载代码步骤
    1)新建文件夹abc(准备用于存放从github中下载的源码)
    2)git init 把目录进行git托管;
       创建版本库时,通过命令 git init (把当前的目录变成可以管理的git仓库,生成隐藏.git文件)把某一目录变成git可以管理的仓库后,当前目录下会多了一个.git的目录,如果没有显示,那么可能是Windows下的文件隐藏打开了。所以,在当前目录的菜单栏,点击【工具】-【文件夹选项】-【查看】-隐藏文件或者文件夹,就会出现.git文件夹。
    3)复制需要下载源码的地址
       我们复制项目源码时,需要复制的是项目的地址,不是项目下某个分支的地址。我们需要的分支等下载到本地后,可以通过git checkout 切换到目标分支。
    4)进入文件夹abc下,右键选择git bash here ,进入git命令行界面,输入以下命令:
       git  clone   源码地址(直接右键粘贴即可)
1.3 Git中SSH key生成步骤
    [参考链接](https://blog.csdn.net/sweet_o/article/details/89791184)
    注意以下几点:
    a.用户主目录是指C:\Users\Administrator
    b.要输入创建命令时,打开Shell(Windows下打开Git Bash),输入:
       ssh-keygen -t rsa -C xxxxxxxxx@example.com
     其中:选项C是大写哦;注意邮箱没有qq。
1.4 多人协同工作模式
    1)首先尝试用git push origin branch-name推送自己的修改.
    2)如果推送失败,则因为远程分支比本地更新早,需要先用git pull试图合并。
    3)如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送。
二、git config
2.1 user.name
   查看用户名。
2.2 user.email
   查看邮箱地址。
2.3 --global user.name “xxxx”
   修改用户名。
2.4 --global user.email"xxxx"
   修改邮箱地址。
三、git branch
3.1 -d branchname
   删除分支。-D强制删除分支。
3.2 branchname
   创建分支。
3.3 -a
   查看当前所有的分支。
四.git checkout
4.1 -b dev
   创建dev分支,并切换到dev分支上。
4.2 branchname
   切换到branchname分支。
4.3 – filename
   撤销文件在工作区做的修改。其中,-- 很重要,如果没有--,那么命令变成创建分支;-- 和文件名之间要有一个空格,否则执行失败。撤销文件分两种情况:
   1)文件修改后没有add即未放到暂存区,使用撤销修改后就等同于删除文件在工作区的修改,文件处于上一个commit的状态。
   2)文件修改后add即已放到暂存区,接着又对其作了修改,撤销修改就回到添加暂存区后的状态,最新的修改丢失。
五、git status
   查看仓库状态。根据命令的提示我们可以使用如下指令将add的文件撤销掉,使其返回到工作区。
   git restore --staged <file>
六、git diff
   git diff 源文件 目标文件
   git diff a b 是以a为基准,把b和a的区别展示出来,即放在前面的是基准。
   在git add之前可以通过git diff查看修改变动点。
6.1 git diff (无参数)
   staging area和working area的文件
6.2 git diff master
   master分支和working area的文件
6.3 git diff HEAD
   HEAD指向的内容和working area的文件
6.4 git diff filename
   查看文件filename修改了那些内容
6.5 举例
   $ git diff
     diff --git a/readme.txt b/readme.txt
     index 0881ade..c1aaf47 100644
     --- a/readme.txt
    +++ b/readme.txt
    @@ -1,3 +1,4 @@
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Creating a new branch is quick AND simple.
    +addxccxcd
	\ No newline at end of file
	【分析】
	1)diff命令输出格式注意:
	   ---代表源文件  
	   +++代表目标文件  
	2)working area的文件都是被当作目标文件来看待。
	3)-开头的行,是只出现在源文件中的行
	   +开头的行,是只出现在目标文件中的行
	   空格开头的行,是源文件和目标文件中都出现的行
	4)差异按照差异小结进行组织,每个差异小结的第一行都是定位语句,由@@开头,@@结尾。
	   在源文件第1行开始的3行和目标文件第1行开始的4行构成一个差异小结。这个差异小结中,目标文件添加了一行addxccxcd。
七.git add
    git add filename  把filename文件添加到暂存区去。添加所有的修改,使用git add .(add和.之间有空格)或者git add -A。git add .和git add -A(不能是小写)在最新的版本中已经没有区别,因此,建议使用git add .

八、git commit
8.1 -m “注释”
   提交文件并加注释。
8.2 --amend
   在原有提交上追加修改并修改提交的信息。
8.3 --amend --no-edit
   在原有提交上追加修改但不修改提交的信息。
8.4 撤销–amend
   首先执行git reflog,查看历史记录的commit id。然后执行git reset+commit id,即可恢复到指定的commit id,且文件的修改回退到not staged状态。
8.5 相关问题汇总
   1)在git commit时候遇到如下问题错误:
      nothing added to commit but untracked files present。
      原因:出现这个问题的原因是在于对应的文件或者对应目录下的文件没有添加,执行git add 命令后再提交即可。
九、git log
   git log命令显示从最近到最远的显示日志。git log 需要q才能退出显示,回到命令行。
9.1 --stat (statistics)
   统计信息,添加或删除了多少行。
9.2 -p
   显示具体的修改。
9.3 -10
   显示最近10记录。
9.4 --author=Conner
   显示用户为Conner的修改
9.5 举例
   1)查看单个文件sensor-dev.c最近三次修改的记录
      git log --stat -3 drivers/input/sensors/sensor-dev.c
十、git reset
10.1 --soft HEAD^
     撤销最近一次commit,还原到存储区(git add状态)
10.2 --hard HEAD^或者–hard HEAD~
     回退到上一个commit,该commit之后的修改不在存储区保留。如果回退到100个版本,使用git reset –hard HEAD~100。该指令慎用。
     如果误使用该指令后,可以使用git reflog查看git修改记录,然后找到需要的mycommit,使用git reset mycommit跳转到mycommit。
十一、git rm
11.1 --cached filenames
     用于将文件从index区(存储区)删除,使文件返回到未被跟踪的状态,但文件本身不会被从工作区删除。该删除操作会记录下来。

11.2 问题汇总
    1)慎用git rm -r --cached . 删除本地缓存文件
       笔者在使用该指令时,竟然出现自己工作区的所有修改都被删除了。
十二、git stash
    git stash的作用是将目前不提交的修改保存至堆栈中,转去干其他的事(比如:切换分支修改bug),待需要时(不一定是执行git stash的分支)恢复出堆栈的内容。
12.1 save “注释”
    给保存到堆栈中的文件写注释。
12.2 list
    查看堆栈中存储的文件列表。

12.3 pop
    将文件从堆栈中取出。恢复文件的同时,删除存储列表中的文件。
12.4 push -m “注释” – 文件
    将指定的文件进行存储。

12.5 push -p -m “注释” – 文件
    以交互的方式只存储单个文件中的某个修改。在交互的过程时,输入s(split)切片将文件的修改划分为单独的部分,根据需求然后决定是否需要保存。

 
 【ref】
 git stash详解
 git stash 部分文件
十三、git push
13.1 -u origin NewLocalBranch
    将本地新建的分支推送至服务器端。加入-u后,后续如果再次提交时,可以直接使用git push即可。
十四、git remote
    查看远程库的信息
14.1 -v
    查看远程库的详细信息。
14.2 add origin https://github.com/tugenhua0707/testgit
    关联一个远程库。
十五、git merge
15.1 branchname
    在当前的分支上合并branchname分支内容。










