Git,作为这个世界上目前最先进的分布式版本控制系统,其强大的管理能力,意味着其复杂程度。今天我来与大家分享以下日常中常用的命令操作的学习心得。
第一条:邮箱用户名更改操作指令。
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
$ git config --list
使用** --global **将电脑上的所有git仓库都配置成使用以下用户名和邮箱,若要单独设置某一文件项目的用户名和邮箱,则在文件项目的根目录下去掉 **--global** 指令即可。配置完成使用 **--list **进行配置的查询,在单独配置的某一文件项目下面查看的配置是全局配置+当前项目的配置, 使用的时候git会优先使用当前文件项目的配置信息。
第二条: 使用git指令创建文件夹
$ mkdir learngit
$ cd learngit
$ pwd
**mkdir** 指令创建文件项目,创建完成 **cd** 文件名进到文件项目下面,**pwd **指令用于显示当前文件项目所在的目录。
第三条: 初始化git仓库
$ git init
**git init **指令将当前文件项目变为git管理的仓库。初始化成功的项目文件,文件夹中会自动生成 .git 目录,这个目录是Git来跟踪管理版本库的。若是没有看到 .git 目录,说明 .git 处于隐藏状态,使用 ls -ah 指令就可以看见被隐藏的 .git 目录,当然当前仓库下面的所有目录都会展现出来。
第四条: 添加文件到git仓库
$ git add 文件名
git add 指令将当前文件项目中的所有文件添加到git仓库,提交过而没有进行修改的文件不会重复提交。同时,该指令可反复多次使用,提交多个文件。
第五条: 把文件提交到仓库
$ git commit -m "wrote a readme file"
**git commit **将 add 指令添加的文件提交到git 仓库中, -m 后面跟着本次提交记录的说明,一般为本次添加修改文件的说明。同时,add 指令多次添加的文件 **commit **指令可一次提交到git仓库。
第六条: 查看修改过的文件
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
git status 指令可随时查询git管理下的所有文件状态,以上指令输出的结果为某些文件被修改过了,但还没有提交当前修改。当然 status 查询只是显示哪个文件被修改过了,若想知道对文件具体内容的修改,要使用以下指令:
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
该指令的输出结果会准确定位到修改所在行及修改的内容。
小结1:
修改过的文件要重新提交到git仓库,git add 指令将修改过的文件添加到仓库,可使用 status 查询当前仓库的状态:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt
此时,该输出结果告诉我们将要提交的文件中已经包含修改过的文件,再使用 git commit将文件提交到仓库当中。
此时,再次使用 **status **指令查看当前仓库的状态,以下输出结果表明已没有可提交的修改。
$ git status
On branch master
nothing to commit, working tree clean
小结2:
对于提交过的文件可以使用以下命令,查看工作区和当前版本库里面最新内容的区别,以便查询是否提交有遗漏的地方。
$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.
第七条: 查询提交历史记录
$ git log
使用 git log 指令查询commit 提交的历史记录,每条记录的具体显示信息为提交的commit版本号,提交时间及当次提交的记录说明。若只需要版本号信息,可添加参数:
$ git log --pretty=oneline
第八条: 历史版本回退
HEAD 表明当前仓库所在版本,HEAD^ 表示上一个版本,HEAD^^ 表示上上个版本,写到往上一百个版本时,就是HEAD~100。
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
使用 git reset 指令可回退到指定的版本。以上指令回退到上一版本,若要回退版本时间较远,可直接输入要回退到的版本号(版本号不一定要写全,git会自动去找对应的版本,但是要有唯一性,不然git可能会找到多个版本好,此时就无法回退了)。
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
若命令行关闭,后悔回退版本,想恢复到最新版本时,可使用以下命令:
$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file
git reflog 指令可以查看指令历史,记录了操作者的每一次指令,可找到最新的版本号,在进行版本恢复。
git log 指令可以查看提交历史,可以确定要回退到哪个版本。
第九条: 撤销修改
$ git checkout -- 文件名
使用 git checkout 指令可以将文件在工作区的修改撤销到上一个add 或commit的状态,回到上一个commit或是add的状态取决于是否又对修改过的文件进行过添加。若没有添加到暂存区即没有 add,则回到上一个commit的版本状态;若添加到了暂存区,又做了修改,则回到上一个 add 的状态。
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
若修改过的文件已经通过** add** 指令添加到暂存区,则使用 git reset HEAD 把暂存区的修改撤销掉,重新放回工作区。
小结3:
git reset 指令既可以回退版本,也可以把暂存区的修改回退到工作区。当使用 HEAD 时,表示为最新的版本。
回退工作区版本使用 **git checkout, 回退暂存区版本使用 git reset HEAD;**若本地修改,同时添加到了暂存区,分两步,**git reset HEAD **回退暂存区修改,重新放回工作区,在 git checkout 撤销工作区修改。
第十条: 删除文件
$ git rm 文件
若工作区的文件被删除了,版本库中的状态和工作区则不一样了,此时可以删除版本库中的文件,使用** git rm** 文件删除仓库中的文件,在 git commit 提交,版本库中的文件就被删除了。
若文件时被误删的,想要把工作区的文件恢复回来,则使用 checkout ,原理则是将版本库的版本替换工作区的版本,所以无论是修改还是删除都可使用 **checkout **。
$ git checkout -- test.txt
第十一条: 查看分支
$ git branch
git branch 指令查看当前所在分支。
第十二条: 切换分支
$ git checkout 分支名
git checkout 分支名 指令切换到指定分支。
第十三条: 创建分支
$ git branch 分支名
git branch 分支名 指令则创建分支**。**
第十四条: 创建并切换分支
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout 加上 -b 相当于以下两条指令。
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
第十五条: 删除分支
$ git branch -d 分支名
git branch -d 分支名 指令删除指定分支。
第十六条: 合并分支
$ git merge dev
git merge 分支名 指令合并指定分支代码到当前所在分支。
**小结4: **
合并代码后时有可能会有冲突,此时使用 git status 指令可查询冲突文件。
第十七条: 查询分支合并情况
$ git log --graph
git log --graph 指令可查看分支的合并图。