Git学习之基础

获取Git仓库

有两种:

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

    进入项目目录并输入:

$ git init

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

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
  • 从服务器上克隆现有的Git仓库
$ git clone [url]

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

在Git仓库中记录变更

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

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

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

*.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参考示例列表

$ git diff #查看已暂存和未暂存的变更
$ git diff --staged  #查看哪些已暂存的内容会进入下一次提交
$ git commit  #提交变更
$ git commit -a  #跳过暂存区
$ git rm  #移除文件
  • 查看提交历史
$ 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分支和合并历史。

撤销操作

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

远程仓库的使用

$ 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]  #删除远程仓库地址

标记

$ 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没有,但是你需要的命令。