Git学习之基础

2018.04.22

获取Git仓库

有两种:

  • 把现有的项目或者目录导入到Git中

    进入项目目录并输入:

    1
    $ git init

生成一个名为.git的目录,包含了构成Git仓库骨架的所有必需文件。
如果要对现有文件(非空目录)进行版本控制,可以跟踪这些文件并进行初次提交。对需要跟踪的文件执行几次git add命令,然后git commit命令即可:

1
2
3
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'

  • 从服务器上克隆现有的Git仓库
    1
    $ git clone [url]

如果想修改目录名称,只需在链接后边加上自定义目录名称即可。

在Git仓库中记录变更

工作目录下的每一个文件都处于两种状态之一:已跟踪(tracked)或未跟踪(untracked)。已跟踪文件又分为未修改、已修改和已暂存三种状态。当刚完成克隆操作后,所有文件都是已跟踪且未修改的。

1
2
3
4
$ git status  #查看当前文件状态
$ git add [file-name] #跟踪新文件
$ git status -s #显示更简洁的状态信息
$ git status --short #同上
  • 忽略文件

如果不希望某一类文件被Git自动添加,甚至都不想这些文件被显示在未跟踪的文件列表下。这些文件一般是自动生成的文件(比如日志文件)或是由构建系统创建的文件。在这种情况下,可以创建名为.gitignore的文件,在其中列出匹配文件的模式。下面是一个.gitignore文件的例子:

1
2
3
4
5
6
*.a             #忽略.a类型的文件
!lib.a #仍然跟踪lib.a,即使上一行指令要忽略.a类型的文件
/TODO #只忽略当前目录的TODO文件,而不忽略子目录下的TODO
build/ #忽略build/目录下的所有文件
doc/*.txt #忽略doc/notes.txt,而不忽略doc/server/arch.txt
doc/**/*.pdf #忽略doc/目录下的所有.pdf文件

这有一份相当全面的.gitignore参考示例列表

1
2
3
4
5
$ git diff #查看已暂存和未暂存的变更
$ git diff --staged #查看哪些已暂存的内容会进入下一次提交
$ git commit #提交变更
$ git commit -a #跳过暂存区
$ git rm #移除文件
  • 查看提交历史
1
2
3
4
5
6
7
8
9
$ git log
$ git log -p #显示每次提交所引入的差异
$ git log -2 #只输出最近的两次提交
$ git log -p -2 #综上
$ git log --stat #查看每个提交的简要统计信息
$ git log --pretty=oneline #在每一行中显示一个提交
$ git log --pretty=format #制定输出格式(在format加上自定义格式)
$ git log --since=2.weeks #列举最近两周的所有提交
$ git log -Sfunction_name #查找添加或删除了特定函数引用的最近一次提交

oneline和format这两个选项与log命令的另一个选项–graph一起使用,就能发挥更大的作用。具体来说,–graph选项会用ASCII字符形式的简单图表来显示Git分支和合并历史。

撤销操作

1
2
3
$ git commit --amend  #提交暂存区的内容
$ git reset HEAD <file> #把文件移出暂存区
$ git checkout --[file] #舍弃对文件的修改。执行后,[file]文件做出的修改都会丢失。

远程仓库的使用

1
2
3
4
5
6
7
8
$ git clone [url]  #克隆某个仓库
$ git remote -v #显示Git存储的每个远程仓库对应的URL
$ git remote add [shortname] [url] #添加一个远程仓库,并起一个名字
$ git fetch [remote-name] #从远程项目获取数据
$ git push [remote-name] [branch-name] #将数据推送到远程仓库
$ git remote show [remote-name] #检查远程仓库
$ git remote rename [old-name] [new-name] #重命名
$ git remote rm [remote-name] #删除远程仓库地址

标记

1
2
3
4
5
6
7
8
9
$ git tag  #列举可用标签
$ git tag -l "v1.0" #查看1.0系列的标记版本
$ git tag -a v1.0 -m "version 1.0" #创建注释标签
$ git show v1.0 #查看标签数据以及对应的提交
$ git tag v1.0-lw #创建轻量标签(把提交的校验和保存到文件中,不包含其他信息)
$ git tag -a v1.0 [校验码] #补加标签
$ git push origin [tagname] #将标签推送到共享服务器
$ git push origin --tags #把所有服务器上还没有的标记推送过去
$ git checkout -b [branchname] [tagname] #在特定标签创建一个新的分支

Git命令重命名

可以通过git config设置每个Git命令的命令,方便操作。还可以创建Git没有,但是你需要的命令。