Git基础
工欲善其事必先利其器,作为一名程序员,对git工具的掌握是非常必要的.
Git的使用这里已经写的非常详细,感谢前辈.该文章只是个人的学习笔记,方便以后的查阅.走过的路至少要留下些脚印.
推荐一个在线练习Git命令的网站传送门
Git在Windows平台上的使用
Git安装
Git安装传送门
Windows平台上使用Git命令
链接文章中的git前总是加了个”$”符号,在Window平台并不需要.在Windows平台上我们可以使用cmd或者cmd的升级版PowerShell执行命令
像Java一样,Git命令的使用同样需要配置系统变量,不过,Git配置的是cmd目录,例如:F:\Program Files (x86)\Git\cmd;
配置流程:右键[我的电脑]->属性->高级系统设置->环境变量->系统变量->Path
初次使用Git前的配置
配置用户信息
用户信息配置命令
git config --global user.name "John Doe" git config --global user.email johndoe@example.com
该命令配置完成后,表示你身份ID的生成,以后的每次提交都会附加该信息.在以后的日志查看中就会看到现在配置的名称和邮箱
重复执行上述命令,可以修改配置的信息配置编辑器
配置编辑器命令
git config --global core.editor emacs
NOTE:
在程序升级时会保留配置信息
检查配置信息命令git config --list
获取Git仓库(repository)
在现有目录中初始化仓库
初始化仓库命令
git init
执行该命令后,将会在当前目录下生成
.git
文件夹,该文件夹内是初始化后的一些基础文件,禁止擅自修改或者删除从服务器端克隆现有仓库
克隆仓库的命令
git clone [url]
例如:
git clone https://github.com/libgit2/libgit2
;
该命令通常用于克隆或者说复制服务器端现有的仓库到本地;
执行该命令后,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来;
克隆下来的文件都是已跟踪状态并且处于未修改状态;
默认情况下,克隆的仓库名与服务器端相同,如果自定义本地仓库的名字,那么执行该命令git clone [url] [NewRepName]
;
控制文件
查看文件状态
文件状态明细
查看文件状态命令
git status
文件状态简览
查看文件简览状态命令
git status -s 或 git status --short
简览状态是指文件明细的展示方式,
git status
比较详细,git status -s
则使用了一些字符来表示文件的状态git status
的状态表现方式git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) README nothing added to commit but untracked files present (use "git add" to track)
git status -s
的状态表现方式git status -s M README -- 右边的M,文件被修改但未放至暂存区 MM Rakefile -- 修改后的文件提交至暂存区后,该文件在工作区又被修改了 A lib/git.rb -- 新添加到暂存区的文件 M lib/simplegit.rb -- 左边的M,文件被修改并放至暂存区 ?? LICENSE.txt -- 新添加的未跟踪状态文件
暂存文件
暂存命令
git add FileName git add all git add lib/ 递归跟踪文件
执行该命令后,文件的状态变更为跟踪状态,并处于暂存区;跟踪可以是某个文件,也可以是某个目录,当时某个目录时,将会递归跟踪该目录下的文件
暂存已修改的文件
该情况是指工作区中修改并提交至暂存区的文件,再次该文件后进行暂存,这也说明工作区和暂存区可以同时存在已修改的文件,也就是简览状态的[ MM ]表示的这种情况,实际上只是文件名相同,内容已经发生改变,执行
git add
命令后,工作区的文件将会覆盖暂存区的文件.查看修改的文件
查看处于暂存区的文件的变化
查看未暂存区文件变化的命令
git diff
该命令查看的是暂存前后的变化(工作区文件与暂存区文件的不同)
查看暂存的文件的变化
查看暂存区文件变化的命令
git diff --cached 或 git diff --staged (Git 1.6.1 及更高版本可用)
该命令查看的是提交前后的变化(暂存区与服务器端文件的不同)
提交更新
提交命令
git commit
该方式,在提交时会启动文本编辑器要求输入本次提交的说明.默认的编辑器可以修改,查看上方的
git config --global core.editor
命令git commit -v
该方式,在提交时会在文本编辑器中放入diff的信息,以便以后查看
git commit -m "discription"
该方式,在输入命令时就把提交说明附加上去了
git commit -a
该方式,省略执行
git add
这个命令,自动将所有已经跟踪过的文件暂存起来然后提交NOTE:这里仅仅是省略了
git add
这个命令而已,文件实际上还是先进入暂存区,再进行提交的,链接中的翻译有歧义.对文件使用该命令时,一定要确保该文件是已跟踪状态移除文件
- 从暂存区移除
移除命令
git rm
同时删除处于跟踪状态和工作区中的文件
注意:如果只是手动的删除目录下的文件,这时候后虽然文件不存在,但是文件跟踪状态清单中还记录着该文件名称,那么此时查看状态时,将会提示
Changes not staged for commit
文件被修改但未暂存.如果一不小心手动删除了,那么可以执行该命令,移除清单中该文件的跟踪状态即可git rm --cached filename
删除处于跟踪状态的文件,保留工作区中的文件
git rm -f
当某个文件提交到暂存区后,再次被修改时,使用
git rm
命令删除将会报错,使用强制删除命令方可删除,该命令会从工作区和暂存区中同时删除文件. 为了避免误删的特殊指令使用场景:当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用
图片演示
移动文件(实际是文件改名)
移动文件命令
git mv oldfile newfile
忽略文件
仓库中总有一些文件不需要git去跟踪,那么这个时候我们就需要去忽略文件–创建.gitignore文件,配置忽略文件的规则.Android Studio在创建项目的时候会自动生成此文件,该文件存在时,git会自动根据该文件内的规则进行文件忽略.
.gitignore的格式规范
- 所有空行或者以
#
开头的行都会被 Git 忽略。可以用来做注释符 - 可以使用标准的 glob 模式匹配
- 匹配模式可以以(/)开头防止递归
- 匹配模式可以以(/)结尾指定目录
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反
- 所有空行或者以
glob 模式是指 shell 所使用的简化了的正则表达式
- 星号(*)匹配零个或多个任意字符
- [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c)
- 问号(?)只匹配一个任意字符
- 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)
- 使用两个星号() 表示匹配任意中间目录,比如a/*/z 可以匹配 a/z, a/b/z 或 a/b/c/z等
GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表传送门
Android .gitignore
# Built application files *.apk *.ap_ # Files for the ART/Dalvik VM *.dex # Java class files *.class # Generated files bin/ gen/ out/ # Gradle files .gradle/ build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log # Android Studio Navigation editor temp files .navigation/ # Android Studio captures folder captures/ # Intellij *.iml .idea/workspace.xml .idea/tasks.xml .idea/libraries # Keystore files *.jks # External native build folder generated in Android Studio 2.2 and later .externalNativeBuild
查看日志
查看日志命令
git log
日志内容非常的庞大,git提供了很多的指令去筛选日志的内容,详细指令
个人常用的自定义格式指令
git log --pretty=format:"%h - %an, %ar : %s" --graph
git log --pretty="%h - %ar - %s" --author=pan --since=2.month
撤销操作
撤销命令
git commit --amend
修改提交信息:当暂存区的文件在工作区中并未修改,那么使用此指令将只是修改了提交的信息而已,该命令后面同样可以添加-m "提交信息"
来直接附加提交信息
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
覆盖最近一次的操作:添加忘记的文件,执行此命令后,会覆盖最近一次的操作
取消暂存的文件
取消暂存文件的命令
git reset HEAD <file>
撤消对文件的修改
撤消对文件的修改指令
git checkout -- [file]
未提交到暂存区的文件进行撤销修改操作