Git命令汇总

缘起,自己工作中使用Git管理开发项目,这里记录平时使用到的Git的用法,主要记录的是认为重要但是不好记的命令。 注:Git Pro 是对git 使用讲解比较详细的教程。

1 Git清除未跟踪的文件

在linux系统中,可以使用 man git clean 查看手册

NAME
       git-clean - Remove untracked files from the working tree

SYNOPSIS
       git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] [<pathspec>...]

其中的几个主要参数:

-d   # 删除未跟踪目录以及目录下的文件,如果目录下包含其他git仓库文件,并不会删除(-dff可以删除)。
-f   # 如果 git cofig 下的 clean.requireForce 为true,那么clean操作需要-f(--force)来强制执行。
-i   # 进入交互模式
-n   # 查看将要被删除的文件,并不实际删除文件

在删除前先查看有哪些文件将要被删除,运行

git clean -n

想删除当前工作目录下的未跟踪文件,但不删除文件夹运行

git clean -f

需要删除当前工作目录下的文件以及文件夹

git clean -df

2 git stash 使用

2.1 git stash 常用命令

(1)git stash save "save message"  : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。

(2)git stash list  :查看stash了哪些存储

(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}

(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show  stash@{$num}  -p ,比如第二个:git stash show  stash@{1}  -p

(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} 

(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

(7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储

(8)git stash clear :删除所有缓存的stash

2.2 git stash 存储部分文件

使用-p进行交互式操作(适合需要具体到修改的时候,例如某个文件中部分需要stash部分不需要) 通过在命令后面直接指定文件(一般情况肯定这个方便)

# 指定说明信息并stash所有cc文件的修改
$ git stash push -m "this is a partly stash test" **/*.cc

2.3 git stash pop 冲突解决

如果使用 git stash pop之后,与新的代码有冲突,想要恢复原来的,可以使用下面的操作方式。

git reset --hard
可以撤销操作,将当前分支状态恢复。

3 git 解决冲突

3.1 git stash pop还原冲突解决

冲突的文件,涉及到一些只需要保留一方,而不用费劲去解决冲突的场景。 可以使用 –ours 和–theirs。 如何识别那些事ours和theirs,一个简单的判断方法

<<<<<<< HEAD
<ours contents>
=======
<theirs contents>
>>>>>>>

从上面可以看出,======= 之前表示的是ours分支,之后表示theirs分支,只需要查看某一处冲突代码即可判断出要保留的分支。 具体命令为

$ git checkout --ours <fileName>
$ git add <fileName>   //标记该冲突已解决
$ git status //查看当前冲突状态

3.2 查看冲突是否解决

在工作中,遇到一个问题,在git merge后,发生冲突,而当冲突较多的时候,逐个检查冲突,有的时候会遗漏一些文件,导致带有冲突标记的文件上传到了 Git 服务器上,如何解决这个问题呢? 使用命令

git diff --check

这个命令会检查 conflict markers(冲突标记)和whitespace errors(空格错误)

参考

  1. Git Pro教程
  2. Git清除未跟踪文件
  3. git stash pop 导致冲突 如何恢复