设为首页 收藏本站
查看: 775|回复: 0

[经验分享] git(学习之三)基本操作

[复制链接]

尚未签到

发表于 2018-9-17 12:56:27 | 显示全部楼层 |阅读模式
  Git学习笔记
  #####################################################
  qq:1218761836
  qq群:150181442
  E-mail:wangxing0122@hotmail.com
  #####################################################
  目录
  Git. 2
  1.1 初次运行前的配置... 2
  1.2 创建版本库... 3
  0.3 git提交文件... 4
  1.4 检查当前文件状态... 4
  1.5 跟踪新文件... 5
  1.6 忽略文件... 6
  1.7 跳过使用暂存区域... 9
  1.8 移除文件... 9
  1.9 移动文件... 10
  2.0 Git 查看历史提交信息... 11
  2.1 git撤销操作... 15
  git支持的协议
  git
  git://
  SSH+git
  ssh://
  Http+git
  http://
  Https+git
  https://
  File(本地)
  File://
Git
1.1 初次运行前的配置
  安装好git之后,需要配置git的环境,只需要配置一次。
  Git自带有一个git config 的工具来帮助设置控制git外观和和行为的配置变量。这些变量存储在三个不同的位置:
  1 /etc/gitconfig 文件:包含系统上每一个用户及他们仓库的通用配置。如果使用带有—system选项的git config时,它会从此文件读写配置变量。
  2 ~/.gitconfig 或~/.config/git/config 文件:只针对当前用户。可以传递—global 选项让git读写此文件。
  3 当前使用仓库的git目录中的config文件(就是.git/config):针对该仓库
  用户信息
  Git 在第一次提交的时候需要这些信息,否则提交会失败,每一个git提交都会使用这些信息,并且写入到每一次提交中,不可更改:
  git config --global user.name "wang xingxing"
  git config --global user.email wangxing0122@hotmail.com
  如果使用—global选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情,git都会使用那么信息,当你针对特定项目使用不同的用户名称与你邮件地址时,可以在那个项目下运行没有—global选项的命令来配置
  文本编辑器
  git config --global core.editor emacs #使默认的编辑器为emacs或者vim
  检查配置信息
  在根目录下运行获取的信息
  [root@wx-a ~]# git config --list
  user.name=wang xingxing
  user.email=wangxing0122@hotmail.com
  core.editor=vim
  在版本库中运行获取的信息
  [root@wx-a sadoc]# git config --list
  user.name=wang xingxing
  user.email=wangxing0122@hotmail.com
  core.editor=vim
  core.repositoryformatversion=0
  core.filemode=true
  core.bare=false
  core.logallrefupdates=true
  看到重复的变量名,因为git会从不同的文件中读取同一个配置(例如:/etc/gitconfig与~/.gitconfig)这种情况下git会找到每一个变量的最后一个配置
  查看某一个变量信息
  [root@wx-a sadoc]# git config user.name
  wang xingxing
  获取git命令帮助
  git –help
  man git
  git –help
1.2 创建版本库
  [root@wx-a /]# mkdir /project/git/sadoc –p
  [root@wx-a /]# cd /project/git/sadoc/
  [root@wx-a sadoc]# git init
  Initialized empty Git repository in /project/git/sadoc/.git/
  [root@wx-a sadoc]# ls -a
  . .. .git
  提示创建了一个空的版本库在/project/git/sadoc/目录下,git init创建一个名为.git 的子目录,这个子目录含有你初始化的git仓库中所有的必须文件(跟踪管理版本库,轻易不要手动修改.git目录中的文件),这些文件是git仓库的骨干。但是,我只做了一个初始化的操作,项目里的文件还没有被跟踪,
  .git 中文件都有哪些
  [root@wx-a sadoc]# tree -a
  .
  └── .git
  ├── branches
  ├── config
  ├── description
  ├── HEAD
  ├── hooks
  │   ├── applypatch-msg.sample
  │   ├── commit-msg.sample
  │   ├── post-commit.sample
  │   ├── post-receive.sample
  │   ├── post-update.sample
  │   ├── pre-applypatch.sample
  │   ├── pre-commit.sample
  │   ├── prepare-commit-msg.sample
  │   ├── pre-rebase.sample
  │   └── update.sample
  ├── info
  │   └── exclude
  ├── objects
  │   ├── info
  │   └── pack
  └── refs
  ├── heads
  └── tags
  10 directories, 14 files
0.3 git提交文件
  为版本库添加文件或者目录
  在版本库的目录下创建文件或者目录
  [root@wx-a sadoc]# mkdir abcd
  [root@wx-a sadoc]# touch test
  [root@wx-a sadoc]# git add test abcd #添加到版本库中
  [root@wx-a sadoc]# git commit –m ‘initial project version’ #提交成功
  [master fc75b2e] initial project version
  0 files changed, 0 insertions(+), 0 deletions(-)
  create mode 100644 test
  git 记录每次更新到仓库
  在git的版本库中对文件做些修改,在完成目标之后,提交更新到仓库。
  工作目录下的每一个文件都不外乎两种状态:已跟踪或未跟踪。已跟踪的文件是指那些被纳入版本控制的文件,在上一次快照中有他们的记录,在工作一段时间后,他们的状态可能处于未修改,已修改或已放入暂存区,工作目录中除已跟踪文件以外的所有其他文件都属于未跟踪文件,他们既不存在于上次快照的记录中,也没有放入暂存区。初次克隆某个仓库的时候,工作目录的所有文件都属于已跟踪文件,并处于未修改状态。
  编辑过某些文件之后,由于上次提交后你对他们做了修改,git将他们标记为已修改文件。我们逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复,所以使用git时文件的生命周期如下:
1.4 检查当前文件状态
  要查看哪些文件处于什么状态,可以用git status 命令。如果在克隆仓库后立即使用使用此命令,会看到类似这样的输出:
  [root@wx-a sadoc]# git status
  # On branch master
  nothing to commit (working directory clean)
  这说明你现在的工作目录相当干净,所有已跟踪文件在上次提交后都未被更改过,此外,上面的信息还表明,当前目录下没有出现任何处于未跟踪状态的新文件,否则git会在这里列出来。最后,该命令还显示了当前所在分支,并告诉你这个分支同远程服务器上对应的分支没有偏离。现在分支名是”“master”“,这是默认的分支名。
  创建一个README文件。使用git status 命令,查看一下文件状态
  [root@wx-a sadoc]# echo “my project” > readme
  [root@wx-a sadoc]# git status
  # On branch master
  # Untracked files:
  # (use “git add …” to include in what will be committed)
  #
  # readme
  nothing added to commit but untracked files present (use “git add” to track)
  查看到这个文件还没有提交到版本库中,也没有添加到版本库中
1.5 跟踪新文件
  [root@wx-a sadoc]# git add readme
  [root@wx-a sadoc]# git status
  # On branch master
  # Changes to be committed:
  # (use “git reset HEAD …” to unstage)
  #
  # new file: readme
  #
  提示这个文件已经放在暂存区,而没有被提交
  修改暂存区文件
  [root@wx-a sadoc]# vim readme
  my project
  abcdesss
  [root@wx-a sadoc]# git status
  # On branch master
  # Changes to be committed:
  # (use “git reset HEAD …” to unstage)
  #
  # new file: readme
  #
  # Changed but not updated:
  # (use “git add …” to update what will be committed)
  # (use “git checkout -- …” to discard changes in working directory)
  #
  # modified: readme
  #
  此时暂存区的文件已经修改,需要重新git add 一下
  [root@wx-a sadoc]# git status
  # On branch master
  # Changes to be committed:
  # (use “git reset HEAD …” to unstage)
  #
  # new file: readme
  #
  状态预览
  [root@wx-a sadoc]# git status –s
  A readme
  或者
  [root@wx-a sadoc]# git status –short
  A readme
  新添加的未跟踪文件前面有?? 标记
  新添加到暂存区的文件前面有A标记
  修改过的文件前面有M标记
1.6 忽略文件
  一般我们总会有些文件无需纳入git的管理,也不希望他们总出现未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等,在这种情况下,我们可以创建一个名为.gitignore 的文件,列出要忽略的文件模式,例如:
  cat .gitignore
  *.[oa]
  *~
  第一行告诉git忽略所有以.o或.a结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。
  第二行告诉git忽略所有以波浪符(~)结尾的文件,许多文件编辑软件(比如emacs)都用这样的文件名保存副本。此外还可以忽略log,tmp或者pid目录,以及自动生成的文档等等。要养成一开始就设置好.gittignore文件的习惯,以免将来误提交这类无用的文件
  文件.gittignore 的格式规范如下:
  所有空行或者以#开头的行都会被git忽略
  可以使用标准的glob模式匹配
  匹配模式可以以(/)开头防止递归
  匹配模式可以以(/)结尾指定目录
  要忽略指定模式以外的文件或目录,可以再模式前加上惊叹号(!)取反。
  所谓的golb模式是指shell所使用的简化了的正则表达式。
  (*)号匹配零个或多个任意字符;[abc]匹配任何一个列在括号中的字符,(?)匹配任意字符;
  例子:
  # no .a files
  *.a
  # but do track lib.a, even though you’re ignoring .a files above
  !lib.a
  # only ignore the TODO file in the current directory, not subdir/TODO
  /TODO
  # ignore all files in the build/ directory
  build/
  # ignore doc/notes.txt, but not doc/server/arch.txt
  doc/*.txt
  # ignore all .pdf files in the doc/ directory
  doc/**/*.pdf
  查看已暂存和未暂存的修改
  [root@wx-a sadoc]# git status
  # On branch master
  # Changes to be committed:
  # (use “git reset HEAD …” to unstage)
  #
  # new file: readme
  #
  # Untracked files:
  # (use “git add …” to include in what will be committed)
  #
  # test-1
  要查看尚未暂存的文件更新哪部分,直接输入git diff
  [root@wx-a sadoc]# git diff
  diff –git a/test-1 b/test-1
  index e69de29..8e2baef 100644
  --- a/test-1
  +++ b/test-1
  @@ -0,0 +1 @@
  +test-1
  [root@wx-a sadoc]#
  若要查看已暂存的将要添加到下次提交的内容,可以用git diff –cached命令(git1.6.1及更高版本还允许使用git diff –staged,效果是相同的,但更好记些)
  [root@wx-a sadoc]# git diff –cached
  diff –git a/readme b/readme
  new file mode 100644
  index 0000000..ba82621
  --- /dev/null
  +++ b/readme
  @@ -0,0 +1,2 @@
  +my project
  +abcdesss
  diff –git a/test-1 b/test-1
  new file mode 100644
  index 0000000..e69de29
  # git diff本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有的改动,所以有时间一下子暂存了所有更新的文件后,运行git diff后却什么也没有,就是这个原因。
  Git diff的插件版本
  可以使用git difftool –tool-help 命令系统支持哪些git diff插件。
  提交更新
  现在的暂存区域已经准备妥当可以提交了,在此之前,请一定要确认还有什么修改过的或新建的文件还没有git add过,否则提交的时候不会记录这些还没暂存起来的变化,这些修改过的文件只保留在本地磁盘,所以,每次准备提交前,先用git status看下,是不是都已暂存起来了,然后再运行提交命令 git commit
  [root@wx-a sadoc]# git commit
  这种方式会启动文本编辑器以便输入本次提交的说明,默认会启用shell的环境变量$EDTTOR所指定的软件,一般都是vim或emacs。当然也可以按照起步介绍的方式,使用git config –global core.deitor 命令设置喜欢的编辑软件)
  编辑器会显示类似下面的文本信息
  # Please enter the commit message for your changes. Lines starting
  # with ‘#’ will be ignored, and an empty message aborts the commit.
  # On branch master
  # Changes to be committed:
  # (use “git reset HEAD …” to unstage)
  #
  # new file: readme
  # new file: test-1
  #
  可以看到,默认提交的消息包含最后一次运行git status的输出,放在注释行里,另外开头还有一空行,供你输入提交说明,也可以去修改注释行,不过留着也没关系。
  也可以再commit 命令后添加-m选项,将提交的信息与命令放在同一行,如下所示:
  [root@wx-a sadoc]# git commit –m “test –version 2”
  [master bec67e0] test –version 2
  1 files changed, 3 insertions(+), 0 deletions(-)
  create mode 100644 readme
  create mode 100644 test-1
  已经完成了一个提交,可以看到,提交之后告诉我,当前是在那个分支(master)。以及本次提交的完整SHA-1 校验和
  bec67e0,以及在本次提交中,有多少文件修订过,多少行添加和删改过。
  提交的时的记录是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态,可以再下次提交时纳入版本管理,每一次运行提交操作,都是对你项目做一次快照,以后可以回到这个状态,或者进行比较。
1.7 跳过使用暂存区域
  尽管使用暂存区域的方式可以静心准备要提交的细节,但有的时候略显繁琐,git提供了一个跳过使用暂存区域的方式,只要在提交的时候,给git commit加上-a 选项,git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add 步骤:
  [root@wx-a sadoc]# git status
  # On branch master
  # Changes to be committed:
  # (use "git reset HEAD ..." to unstage)
  #
  # new file: abc-add
  # new file: test-add
  #
  # Changed but not updated:
  # (use "git add ..." to update what will be committed)
  # (use "git checkout -- ..." to discard changes in working directory)
  #
  # modified: abc-add
  # modified: test-add
  [root@wx-a sadoc]# git commit -a -m 'added new benchmarks'
  [master 82276f4] added new benchmarks
  2 files changed, 2 insertions(+), 0 deletions(-)
  create mode 100644 abc-add
  create mode 100644 test-add
1.8 移除文件
  要从git移除某个文件,就必须要从已跟踪文件清单中移除(确切的说,是从暂存区域移除), 然后提交。可以用git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中。
  如果只是简单的从工作目录中手工删除文件,运行 git status 时就会在changes not staged for commit部分(也就是未暂存清单)看到。
  [root@wx-a sadoc]# ll
  total 24
  drwxr-xr-x. 2 root root 4096 Sep 30 01:07 aa
  -rw-r–r--. 1 root root 0 Sep 30 01:07 abc
  -rw-r–r--. 1 root root 9 Oct 2 06:00 abc-add
  drwxr-xr-x. 2 root root 4096 Oct 1 22:53 abcd
  -rw-r–r--. 1 root root 20 Oct 1 23:37 readme
  -rw-r–r--. 1 root root 0 Oct 1 22:53 test
  -rw-r–r--. 1 root root 7 Oct 2 04:49 test-1
  -rw-r–r--. 1 root root 19 Oct 2 06:00 test-add
  [root@wx-a sadoc]# rm –rf test-add
  [root@wx-a sadoc]# git status
  # On branch master
  # Changed but not updated:
  # (use “git add/rm …” to update what will be committed)
  # (use “git checkout -- …” to discard changes in working directory)
  #
  # deleted: test-add
  #
  no changes added to commit (use “git add” and/or “git commit –a”)
  此时需要运行 git rm记录此次移除文件的操作
  [root@wx-a sadoc]# git rm test-add
  rm ‘test-add’
  [root@wx-a sadoc]# git status
  # On branch master
  # Changes to be committed:
  # (use “git reset HEAD …” to unstage)
  #
  # deleted: test-add
  #
  下一次提交时,该文件就不再纳入版本管理了,如果删除之前修改并且已经放到暂存区域的话,则必须要用强制删除选项-f,这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被git恢复。
  另外一种情况是,我们想把文件从git仓库移除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,你想让文件保留在磁盘,但是并不想让git继续跟踪,当你忘记添加.gitignore 文件;不小心把一个很大的的日志文件或一堆.a 这样编译生成文件添加到暂存区时,这一做法尤其有用,为达到这一目的,使用—cached选项:
  git rm –cached README
  git rm 命令后面可以列出文件或者目录的名字,也可以使用glob模式。
  Git rm log/\*.log
  注意到这个星号* 之前的反斜杠\,因为git有它自己的文件模式扩展匹配方式,所以我们不用shell来帮忙,此命令删除log/ 目录下扩展名为.log 的所有文件。类似的比如:
  git rm \*~
  该命令为删除以~ 结尾的所有文件
1.9 移动文件
  不像其他的vcs系统,git并不显式跟踪文件移动操作。如果在git中重命名了某个文件,仓库中存储的元数据并不会体现出这是一次改名操作。不过git非常聪明,它会推断出究竟发生了什么。
  既然如此,当你看到git的mv 命令时会困惑不已。要在git中对文件改名,可以这么做:
  git mv file_form file_to
  它会恰如预期般正常工作,实际上,即便此时查看状态信息,也会明白无误地看到关于命名操作的说明:
  [root@wx-a sadoc]# git mv readme readme.md
  [root@wx-a sadoc]# git status
  # On branch master
  # Changes to be committed:
  # (use "git reset HEAD ..." to unstage)
  #
  # renamed: readme -> readme.md
  其实,运行git mv就相当于运行了下面三条命令:
  mv readme readme.md
  git rm readme
  git add readme
  如此分开操作,git也会意识到这是一次改名,所以不管何种方式结果都一样,两者唯一的区别是,mv是一条命令而另一种需要三条命令,直接用git mv轻便的多,不过有时间用其他工具批处理改名的话,要记得提交前删除老的文件名,再添加新的文件名。
2.0 Git 查看历史提交信息
  在提交若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史,完成这个任务最简单而又有效的工具是git log命令。
  [root@wx-a sadoc]# git log
  commit 82276f4036681b5f4686346e13e3f79fba475214
  Author: wang xingxing
  Date: Fri Oct 2 06:01:11 2015 +0800
  added new benchmarks
  commit bec67e0ba02e81b2b9d4ddd1c65791ecde16c8d0
  Author: wang xingxing
  Date: Fri Oct 2 05:20:47 2015 +0800
  test –version 2
  commit fc75b2e8cdd381516dad6acb6c04bd8da52b89db
  Author: wang xingxing
  Date: Thu Oct 1 22:54:21 2015 +0800
  initial project version
  commit e14c816c6fa318a4ac56599b1b781f1adbaf2781
  Author: root
  Date: Wed Sep 30 01:09:45 2015 +0800
  in aa abc ok
  默认不用任何参数的话,git log会按提交时间列出所有的更新,最近的更新排在最上面。正如你所看到的,这个命令会列出每个提交的SHA-1 校验和、作者名字和电子邮件地址、提交时间以及提交说明。
  Git log有许多选项可以帮助你搜寻你所要找的提交,最常用的一些命令:
  一个常用的选项是-p,用来显示每次提交的内容差异,你也可以加上-2来仅显示最近两次提交:
  [root@wx-a sadoc]# git log –p -2
  commit 82276f4036681b5f4686346e13e3f79fba475214
  Author: wang xingxing
  Date: Fri Oct 2 06:01:11 2015 +0800
  added new benchmarks
  diff –git a/abc-add b/abc-add
  new file mode 100644
  index 0000000..2d91f20
  --- /dev/null
  +++ b/abc-add
  @@ -0,0 +1 @@
  +test add
  diff –git a/test-add b/test-add
  new file mode 100644
  index 0000000..8de9442
  --- /dev/null
  +++ b/test-add
  @@ -0,0 +1 @@
  +test is in add –a
  commit bec67e0ba02e81b2b9d4ddd1c65791ecde16c8d0
  Author: wang xingxing
  Date: Fri Oct 2 05:20:47 2015 +0800
  test –version 2
  diff –git a/readme b/readme
  new file mode 100644
  index 0000000..ba82621
  …………………………………………………….
  该选项除了显示基本信息之外,还在附带了每次commit的变化,当进行代码审查,或者快速浏览某个搭档提交的commit所带来的变化的时候,这个参数就费用有用了,你也可以为git log附带一系列的总结性选项。比如说你想看到每次提交的简略的统计信息,你可以使用—stat 选项
  git log –stat
  另外一个常用的选项是—pretty,这个选项可以指定使用不同于默认格式的方式展示提交历史,这个选项有一些内建的子选项可以配合使用,比如用oneline将每个提交放在一行显示,查看的提交数很大时非常有用,另外还有short,full和fuller可以用,展示的信息或多或少有些不同,
  git log –pretty=oneline
  但最有意思的是format,可以定制要显示的记录格式,这样的输出对后期提取分析格外有用,因为你知道输出的格式不会随着git的更新而发生改变
  [root@wx-a sadoc]# git log –pretty=format:”%h - %an, %ar : %s”
  82276f4 – wang xingxing, 12 hours ago : added new benchmarks
  bec67e0 – wang xingxing, 13 hours ago : test –version 2
  fc75b2e – wang xingxing, 19 hours ago : initial project version
  e14c816 – root, 3 days ago : in aa abc ok
  选项
  说明
  %H
  提交对象(commit)的完整哈希字串
  %h
  提交对象的简短哈希字串
  %T
  树对象(tree)的完整哈希字串
  %t
  树对象的简短哈希字串
  %P
  父对象(parent)的完整哈希字串
  %p
  父对象的简短哈希字串
  %an
  作者(author)的名字
  %ae
  作者的电子邮件地址
  %ad
  作者修订日期(可以用 –date= 选项定制格式)
  %ar
  作者修订日期,按多久以前的方式显示
  %cn
  提交者(committer)的名字
  %ce
  提交者的电子邮件地址
  %cd
  提交日期
  %cr
  提交日期,按多久以前的方式显示
  %s
  提交说明
  作者和提交者之间究竟的区别:其实作者指的是实际做出修改的人,提交者指的是最后将此工作成果提交到仓库的人,所以,当你为某个项目发布补丁,然后某个核心成员将你的补丁并入项目时,你就是作者,而那个核心成员就是提交者。
  当oneline或format与另一个log 选项—graph结合使用时尤其有用,这个选项添加一些ASCII字符串来形象地展示你的分支、合并历史:
  [root@wx-a sadoc]# git log –pretty=format:”%h %s” –graph
  * 82276f4 added new benchmarks
  * bec67e0 test –version 2
  * fc75b2e initial project version
  * e14c816 in aa abc ok
  以上只是简单介绍了一些git log命令支持的选项,表2列出我们目前涉及到和没涉及到的选项,已经他们是如何影响log命令的输出的:
  选项
  说明
  -p
  按补丁格式显示每个更新之间的差异。
  --stat
  显示每次更新的文件修改统计信息。
  --shortstat
  只显示 –stat 中最后的行数修改添加移除统计。
  --name-only
  仅在提交信息后显示已修改的文件清单。
  --name-status
  显示新增、修改、删除的文件清单。
  --abbrev-commit
  仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
  --relative-date
  使用较短的相对时间显示(比如,“2 weeks ago”“)。
  --graph
  显示 ASCII 图形表示的分支合并历史。
  --pretty
  使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
  限制输出长度
  除了定制输出格式的选项之外,git log还有许多非常实用的限制输出长度的选项,也就是只输出部分提交信息.之前你已经看到过-2了,它只显示最近两条提交,实际上,这是-选项的写法,期中的n可以是任何整数,表示仅显示最近若干条提交。不过实践中我们是不太用这个选项的,git在输出所有提交时会自动调用分页程序,所以你一次只会看到一页的内容。
  另外还有按照时间作限制的选项,比如—since和—until也很有用。例子:列出所有最近2周内的提交
  [root@wx-a sadoc]# git log –since=2.weeks
  这个命令也可以再多种格式下工作,比如说具体的某一天”“2015-10-2”“,或者是相对多久以前”“ years 1 day 3 minutes ago”“还可以给出搜索条件,列出符合的提交,用—author选项显示指定作者的提交,用—grep选项搜索提交说明的关键字,
  另外一个费用有用的筛选选项是-S,可以列出那些添加或移除了某些字符串的提交。比如说,你想找出添加或移除了某一个特定函数的引用的提交,你可以这样使用:
  [root@wx-a sadoc]# git log –Sfunction_name
  最后一个很实用的git log选项是路径(path),如果只关心某些文件或者目录的历史提交,可以再git log选项的最后指定它们的路径,因为是放在最后位置上的选项,所以用两个短划线(-)隔开之前的选项和后面限定的路径名。
  限制 git log 输出的选项
  选项
  说明
  -(n)
  仅显示最近的 n 条提交
  --since, --after
  仅显示指定时间之后的提交。
  --until, --before
  仅显示指定时间之前的提交。
  --author
  仅显示指定作者相关的提交。
  --committer
  仅显示指定提交者相关的提交。
  --grep
  仅显示含指定关键字的提交
  -S
  仅显示添加或移除了某个关键字的提交
  例子:如果查看git仓库中,,2008年10月期间,junio Hamano提交的但未合并的测试文件,可以用下面的查询命令:
  git log –pretty=”%h - %s” –author=gitster –since=”2008-10-01” --before=”2008-11-01” –no-merges – t/
2.1 git撤销操作
  在任何一个阶段,你都有可能想要撤销某些操作,这里,我们将会学习几个撤销你所做修改的基本工具,注意,有些撤销操作是不可逆的,这是在git使用的过程中,会因为操作失误而导致之前的工作丢失的少有的几个地方之一。
  有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行带有—amend选项的提交命令尝试重新提交:
  git commit --amend
  这个命令会将暂存区中的文件提交。如果上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。
  文件编辑器启动后,可以看到之前的提交信息,编辑后保存会覆盖原来提交的信息。
  例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
  git commit -m ‘initial commit’
  git add forgotten_file
  git commit --amend
  最终你只会有一个提交-第二次提交将代替第一次提交的结果。
  取消暂存的文件
  git reset HEAD file 来取消暂存
  撤销对文件的修改
  git status 查看会告诉你是否撤销对文件的修改
  git checkout -- file 撤销对文件的修改
  git命令的帮助   git help  status


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-588433-1-1.html 上篇帖子: git(学习之三)git 协议 下篇帖子: 学习小笔记---git 安装与使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表