Git学习笔记

Git是目前世界上最先进的分布式版本控制系统,堪称高端大气上档次。作为程序猿如果不了解Git相关知识都不好意思出去装一波。最早Git是在Linux上跑,但现在可以在Linux、Unix、Mac、Windows各个平台上奔跑。本人是下载了Windows版的Git,msysgit是Windows版的Git,从http://msysgit.github.io/下载,默认安装即可。完成后打开“Git”--->“Git Bash”,配置一下自己的身份,这样在提交代码的时候就知道是谁提交的了,在命令行里设置你的名字和Email地址:

1
$ git config --global user.name "your name"
1
$ git config --global user.email "email@XXX.com"

创建代码仓库

首先切换到某盘某目录下:"cd d:"表示切换到D盘,然后“cd codes/test”表示到test这一目录下,然后在这个目录下输入此命令:

1
git init

只需要一行命令就可以完成创建代码仓库的操作,即就会把此目录变成Git可以管理的仓库,这只是一个空仓库。可以在目录下看见一个隐藏的 .git 文件夹,这个文件夹就是用来记录本地所有的Git操作,可以通过 ls -al 命令来查看一下。

提交本地文件

第一步,使用 git add <file> 将本地想要添加的文件添加到仓库,可以反复多次使用,添加多个文件,文件一定要是仓库所在目录中的,别的地方找不到。git add . 可以一次性将所有文件添加好。

第二步,使用 git commit -m "XXX" 将文件提交到仓库,-m后面是输入提交的描述信息,可任意输入,但最好是有用的信息。

Git进阶

git add 命令添加文件,实际上就是把文件修改添加到暂存区(Stage)。

git commit 命令提交文件,就是把暂存区的所有文件一次性提交到当前分支。

git status 命令查看文件修改情况。status会时刻掌握仓库状态,当文件被修改后,此命令会显示修改状态。显示上次提交更新后或写入缓存的改动。

git diff 查看修改内容,文件修改了什么内容都会显示出来,显示已写入缓存与已修改但尚未写入缓存的改动的区别。

尚未缓存的改动:git diff

查看已缓存的改动: git diff --cached

查看已缓存的与未缓存的所有改动:git diff HEAD

显示摘要而非整个 diff:git diff --stat

命令git tag可以查看所有标签。

命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

git checkout -- file 全部撤销工作区修改,只要是没有add到暂存区都可以撤销,一是文件自修改后没有添加暂存区,二是添加到暂存区后,有做了修改,但又未重新添加。

git reset 版本回退,Git可以让我们在各个版本之间穿梭,HEAD指向当前版本,使用 git reset --hard commit_id 回退我们想要版本。此命令既可以退回版本,又可以把暂存区的修改退回到工作区(文件没有提交也就是没有 git commit),然后再用git checkout -- file 撤销全部工作区修改,用命令 git reset HEAD file 把暂存区修改全部撤销,重新回到工作区。在此期间可以用 git status 查看情况。

git log 查看版本记录,在回退前可以用这个命令查看想要到哪个版本。

git reflog 查看每一次命令,用这命令可以让我们再次回到未来的哪个版本。

git rm 将文件从暂存区中删除。注意这与git reset HEAD 将文件取消暂存区修改是有区别的。当在文件管理器中把文件删除了也就是在工作区删除了,因为在暂存区中还有此文件,如果的确要从版本库中删除此文件,就用 git rm filename 删掉,然后 git commit。如果删错了,后悔了,就可以用 git checkout -- file 恢复。如果文件已经提交到了版本库中,不要担心,都能回到以前最新版本。

关联GitHub仓库

首先注册一个GitHub账号,然后配置好一些所需东西,及生成SSH key。在GitHub上建一个仓库,然后用命令把本地仓库和远程仓库关联起来:

git remote add origin git@github.com:XXX/YYY.git

其中XXX是GitHub账户名,YYY是远程仓库名,然后就可以把本地仓库的内容推送到远程仓库。

git push -u origin master 第一次推送用此命令,因为 -u 参数,Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来。

git push origin master 关联后,在以后的推送就可以简化命令。

git clone 将远程仓库克隆到本地。

git remote 查看当前配置有哪些仓库。

git remote -v 可以看到每个别名的实际链接地址。

git checkout -b XXX 表示创建并切换到分支XXX上,相当于以下两句命令:

git branch XXX

git checkout XXX 然后可以用命令 git branch 查看当前分支。

以下命令可以将指定分支合并到当前分支:

git checkout master

git merge XXX

将XXX分支上修改并提交的内容合并到master分支上,然后就可以放心删除分支:git branch -d XXX,当Git无法合并分支时,首先要解决冲突再提交,合并完成,用 git log --graph 查看分支合并图。

git branch -D XXX 当分支没有合并,用此命令强行删除。

远程修改同步到本地

git fetch origin master 执行此命令后,就会将远程版本库上的代码同步到本地,不过同步下来的代码不会合并到任何分支上,而是会存放在到一个origin/master分支上,这时我们可以通过diff命令来查看远程版本库到底修改了哪些东西:

1
git diff origin/master

之后再调用merge命令将origin/master分支分支上的修改合并到主分支上:

1
git merge origin/master

而pull命令则是相当于将fetch命令和merge命令放在一起执行了,它可以从远程版本库上获取最新的代码并且合并到本地:

1
git pull origin master

创建标签

命令git tag <name>用于新建一个标签,默认为 HEAD,也可以指定一个commit id;

git tag -a <tagname> -m "blablabla..."可以指定标签信息;

git tag -s <tagname> -m "blablabla..."可以用 PGP 签名标签;

命令git push origin <tagname>可以推送一个本地标签;

命令git push origin --tags可以推送全部未推送过的本地标签;

命令git tag -d <tagname>可以删除一个本地标签;

学习资料

廖雪峰官网:Git精品教程

极客学院Git教程

菜鸟教程Git教程