一. 开始工作区
1. clone 克隆远程仓库到本地
git clone https://github.com/ForgetSou/myBlog.git |
2. init 初始化仓库
git init |
二.处理变化
1. git add
添加文件到暂存区
1.1 添加一个或多个文件
git add [file1] [file2] ... |
1.2 添加指定目录(包括子目录)到暂存区
git add [dir] |
1.3 添加当前所在目录所有文件到暂存区
git add . |
2. git status
查看仓库状态,显示有变更的文件
git status -s // 获取间断的输出结果 |
3. git diff
git diff 比较文件的不同,即暂存区和工作区的差异
git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件对区别。
git diff 有两个主要的应用场景。
- 尚未缓存的改动:git diff
- 查看已缓存的改动: git diff –cached
- 查看已缓存的与未缓存的所有改动:git diff HEAD
- 显示摘要而非整个 diff:git diff –stat
显示暂存区和工作区的差异:
$ git diff [file] |
显示暂存区和上一次提交(commit)的差异:
$ git diff --cached [file] |
显示两次提交之间的差异:
$ git diff [first-branch]...[second-branch] |
4. commit
提交暂存区到本地仓库中:
git commit -m [message] |
[message] 可以是一些备注信息。
提交暂存区的指定文件到仓库区:
$ git commit [file1] [file2] ... -m [message] |
-a 参数设置修改文件后不需要执行 git add 命令,直接来提交
$ git commit -a |
设置提交代码时的用户信息
开始前我们需要先设置提交的用户信息,包括用户名和邮箱:
$ git config --global user.name 'runoob' |
如果去掉 –global 参数只对当前仓库有效。
提交修改
接下来我们就可以对 hello.php 的所有改动从暂存区内容添加到本地仓库中。
以下实例,我们使用 -m 选项以在命令行中提供提交注释。
$ git add hello.php |
现在我们已经记录了快照。如果我们再执行 git status:
$ git status |
以上输出说明我们在最近一次提交之后,没有做任何改动,是一个 “working directory clean”,翻译过来就是干净的工作目录。
如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。 如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim。屏幕会像这样:
# Please enter the commit message for your changes. Lines starting |
如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。命令格式如下:
git commit -a |
我们先修改 hello.php 文件为以下内容:
<?php |
再执行以下命令:
$ git commit -am '修改 hello.php 文件' |
5. git reset
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD] |
–mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
git reset [HEAD] |
实例:
$ git reset HEAD^ # 回退所有内容到上一个版本 |
–soft 参数用于回退到某个版本:
git reset --soft HEAD |
实例:
$ git reset –soft HEAD~3 # 回退上上上一个版本
–hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
git reset --hard HEAD |
实例:
$ git reset –hard HEAD~3 # 回退上上上一个版本 |
注意:谨慎使用 –hard 参数,它会删除回退点之前的所有信息。
HEAD 说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
- 以此类推…
可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
以此类推…
git reset HEAD
git reset HEAD 命令用于取消已缓存的内容。
我们先改动文件 README 文件,内容如下:
Git 测试 |
hello.php 文件修改为:
<?php |
现在两个文件修改后,都提交到了缓存区,我们现在要取消其中一个的缓存,操作如下:
$ git status -s |
现在你执行 git commit,只会将 README 文件的改动提交,而 hello.php 是没有的。
$ git commit -m '修改' |
可以看到 hello.php 文件的修改并未提交。
这时我们可以使用以下命令将 hello.php 的修改提交:
$ git commit -am '修改 hello.php 文件' |
简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。
6. git rm
git rm 命令用于删除文件。
如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。
git rm 删除文件有以下几种形式:
1、将文件从暂存区和工作区中删除:
git rm <file> |
以下实例从暂存区和工作区中删除 runoob.txt 文件:
git rm runoob.txt |
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。
强行从暂存区和工作区中删除修改后的 runoob.txt 文件:
git rm -f runoob.txt |
如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 –cached 选项即可:
git rm --cached <file> |
以下实例从暂存区中删除 runoob.txt 文件:
git rm --cached runoob.txt |
实例
删除 hello.php 文件:
$ git rm hello.php |
文件从暂存区域移除,但工作区保留:
$ git rm --cached README |
可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:
git rm –r * |
进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录。
7. git mv
git mv 命令用于移动或重命名一个文件、目录或软连接。
git mv [file] [newfile] |
如果新但文件名已经存在,但还是要重命名它,可以使用 -f 参数:
git mv -f [file] [newfile] |
我们可以添加一个 README 文件(如果没有但话):
$ git add README |
然后对其重命名:
$ git mv README README.md |
三. 提交日志
Git 提交历史一般常用两个命令:
- git log - 查看历史提交记录。
- git blame
- 以列表形式查看指定文件的历史修改记录。
1. git log
在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。
我们可以用 –oneline 选项来查看历史记录的简洁的版本。
git log --oneline |
我们还可以用 –graph 选项,查看历史中什么时候出现了分支、合并。
你也可以用 –reverse 参数来逆向显示所有日志。
git log --reverse --oneline |
如果只想查找指定用户的提交日志可以使用命令:git log –author
git log --author=Linus --oneline |
如果你要指定日期,可以执行几个选项:–since 和 –before,但是你也可以用 –until 和 –after。–no-merges 选项以隐藏合并提交。
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges |
2. git blame
如果要查看指定文件的修改记录可以使用 git blame 命令,格式如下:
git blame <file> |
git blame 命令是以列表形式显示修改记录
git blame README |