git基础操作

2 git基础操作

本章学习以后应该具备的能力

  1. 配置和初始化本地库
  2. 开始或停止跟踪文件
  3. 暂存提交更改
  4. 如何设置git以忽略文件或文件模式
  5. 如何快速纠正错误(撤销操作)
  6. 如何浏览项目历史,查看每次提交之间的变化(查看项目提交历史)
  7. 如何向远程git仓库推送及如何从远程git仓库提取文件

2.1 创建Git存储库

获取一个git仓库有以下两种方式:

  1. 将本地项目(未受版本控制的)转换为一个git存储库;
  2. 从其他地方克隆现有的git仓库。

2.1.1 从现有目录中初始化git仓库

使用git对现有项目进行版本控制:

  1. 进入到本地项目保存的位置:C:\Users\Administrator\Desktop\localrepository,在当前目录打开Git Bash Here
    git基础操作_第1张图片
  2. 使用指令git init初始化当前目录,git会创建一个名为.git的子目录,里面包含所有必要的git仓库文件。
    git基础操作_第2张图片
  3. 使用git add让git记住该项目的所有文件,然后使用git commit提交。
    git add *:将文件加入暂存区,即Staged暂存状态。
    git基础操作_第3张图片
    git commit -m 'Initial project version'-m是message的缩写,给本次提交添加一条提交信息。git基础操作_第4张图片

2.1.2 克隆现有存储库

当使用git clone指令时,默认会拉取项目历史记录中的所有版本。

  1. 指令git clone :克隆git仓库。如克隆名为libgit2的git仓库,默认为git仓库名。
    git clone https://github.com/libgit2/libgit2
    git基础操作_第5张图片

  2. git允许为克隆的项目自定义一个目录名:git clone https://github.com/libgit2/libgit2 mydirectoryname
    git基础操作_第6张图片

2.2 记录对存储库的更改

git基础操作_第7张图片

  1. Untracked:文件未跟踪状态,指git还未记录这些文件。如首次初始化项目时,文件都处于该状态,使用git add可以转为Staged状态。
  2. Modified:文件已修改状态,修改的内容还未加入暂存区。使用git add可以转为Staged状态。
  3. Staged:文件已暂存状态,指文件已加入暂存区。每次执行git commit时,暂存区的内容会被提交到git仓库,否则不会被提交。

2.2.1 检查文件状态

git status指令:查看文件的状态,如未跟踪、已修改和已暂存3种状态。
下面是对刚克隆的git仓库使用git status
git基础操作_第8张图片

  1. working tree clean:干净的工作区,没有任何操作。
  2. nothing to commit:暂存区没有任何内容,即没有要提交的内容。
  3. 使用git status后,会列出所有未跟踪文件、被修改文件、新建的文件和已暂存的文件等等。

在git仓库中创建一个TEST.md文件,再使用git status
git基础操作_第9张图片

2.2.2 跟踪新文件

git add指令:将文件加入暂存区。
git基础操作_第10张图片

使用git add将文件加入暂存区(即Staged状态)。下次提交时,暂存区的内容会作为历史快照被加入到项目提交历史中,提交以后的项目为最新的快照。

2.2.3 暂存修改的文件

  1. 修改README.md文件,文件处于modified状态。
    git基础操作_第11张图片

  2. 使用git add将修改的文件加入暂存区(即Staged状态)。
    git基础操作_第12张图片
    加入暂存区的文件在下次执行git commit指令时会被提交到git库中。

  3. 对已加入暂存区的README.md文件再次修改,会发生什么?使用git status观察结果。
    git基础操作_第13张图片
    在第二次修改后,未使用git add指令,即第二次修改的文件未加入暂存区。此时git有两个版本的README.md,第一版第一次修改且已暂存,第二版第二次修改未暂存。

  4. 执行git commit将提交第一版README.md。再次执行git add将第二版加入暂存区,才能提交第二版。
    git基础操作_第14张图片

小结:

  1. 每次修改文件后必须再次执行git add,将文件加入暂存区。
  2. 只有加入暂存区的内容(Staged),才会被提交至git仓库。

git add指令实际上是一个多用途指令:

  1. 执行git init后首次使用git add *是为了跟踪项目中的文件(加入暂存区);
  2. 加入新文件后或者修改文件后使用git add是将文件或修改的文件加入到暂存区。
  3. 简单的理解git add指令是将文件加入暂存区,暂存区中的文件在执行git commit时会被提交。

2.2.4 简洁的状态信息

git status获取的状态信息比较长,git status -sgit status --short指令可以获取更精简的状态信息。
git基础操作_第15张图片

  1. ??:代表未跟踪文件
  2. A:代表已添加到暂存区的新文件
  3. M:为修改的文件,修改一次有一个M

2.2.5 忽略文件

忽略项目中的某些文件,当执行git status时,git不会将其标记为untracked状态。简单的说,创建一个.gitignore文件,里面存放一些与被忽略文件名相匹配的正则表达式规则。

全局模式(Glob patterns)就像简化的正则表达式:

  1. *:匹配0或多个字符
  2. [abc]:匹配括号中的任何字符
  3. ?:匹配单个字符
  4. [0-9]:匹配它们之间的任何字符,如这个是0-9之间的任何字符
  5. **:两个星号匹配嵌套目录,如a/**/z可以匹配a/za/b/za/b/c/z

下面是一个.gitignore文件示例:
git基础操作_第16张图片
项目根目录中的.gitignore文件应用于整个库,子目录中的.gitignore文件只应用于它们所在的目录。

2.2.6 查看已暂存和未暂存的更改

  1. git diff指令:查看已修改但未暂存的内容。
    git基础操作_第17张图片
  2. git diff --staged指令:查看已修改且已暂存的内容。
    git基础操作_第18张图片

另外就是,先修改并暂存,然后再修改不暂存,此时执行git diff指令。

  1. 以README.md为例git基础操作_第19张图片
  2. 分别执行git diffgit diff --staged
    git基础操作_第20张图片
  3. 使用git diff --stagedgit diff --cached都可以查看当前哪些修改时已暂存的
    git基础操作_第21张图片

2.2.7 提交更改

未加入暂存区的新增(created)和修改(modified),执行git commit时不会被提交。
git commit指令:将暂存区中的文件提交到git库。

  1. 单独使用git commit时,会进入编辑器,可以在编辑器中添加提交信息。
    git基础操作_第22张图片

  2. 执行git commit时传入-m选项,可以直接添加提交信息。
    git基础操作_第23张图片

2.2.8 跳过暂存区

git commit -a:执行git commit时传入-a选项,跳过暂存区直接提交更改。一般会同时传入-am连个选项。
git基础操作_第24张图片
在这里插入图片描述

2.2.9 删除文件

  1. rm :将文件移出暂存区且删除文件(Staged Untracked),但删除记录没有提交到本地git库。
    git基础操作_第25张图片
  2. git rm :将本次删除提交到本地git库中记录下来。
    git基础操作_第26张图片
  3. 如果要删除并提交已修改了的文件或已加入暂存区的文件,必须使用-f标签强制删除。
    在这里插入图片描述
    在这里插入图片描述
  4. git rm --cached :只从暂存区删除(git不再跟踪该文件),本地保留该文件。
    git基础操作_第27张图片
  5. 可以将文件,目录或者文件glob模式传给git rm指令
    git rm log/\*.log:删除log目录下所有以.log为扩展名的文件
    git rm \*~:删除所有名称以~结尾的文件

2.2.10 移动文件

git mv file_from file_to:重命名文件
git基础操作_第28张图片
相当于执行了3条指令
mv Hello Hello.md:先删除Hello,新建一个Hello.md
git rm Hello:将删除Hello的记录提交
git add Hello.md:将新文件Hello.md加入暂存区(git跟踪该文件)
image.png
git基础操作_第29张图片
git基础操作_第30张图片
git基础操作_第31张图片

2.3 查看提交历史

git基础操作_第32张图片

  1. git log指令:查看当前项目的所有提交历史
    git基础操作_第33张图片

  2. -p 或 --patch参数:显示每次提交中引入的差异,再传入一个-2只显示最新的两条记录
    git基础操作_第34张图片

  3. --stat参数:查看每个提交的缩写统计数据
    git基础操作_第35张图片

  4. --pretty参数:改变log输出的格式,可以使用一些预设的值

    1. oneline:每个提交打印在一行,适用于查看大量提交
      git基础操作_第36张图片

    2. short、full、fuller:以相同的格式输出,但信息会较少或较多

    3. format:按照自己设置的格式打印信息
      git基础操作_第37张图片
      git基础操作_第38张图片

  5. git log的所有参数选项
    git基础操作_第39张图片

2.3.1 限制日志(log)输出

  1. -参数:n为正整数,意为输出最新的n条提交信息
    git基础操作_第40张图片

  2. --since/--until:时间限制,可以指定日期(2008-01-15)或相对日期(2 years 1 day 3 minutes ago)
    git基础操作_第41张图片

  3. --author:指定作者

  4. --grep:指定提交信息中的关键字,可以同时筛选作者和提交信息中的关键字

  5. -S:接收一个字符串,显示改变了该字符串出现次数的提交

  6. git log -- path/to/file:传入一个目录路径,将输出限制为对该路径下文件的修改的提交

  7. git log的限制选项
    image.png

  8. --no-merges:限制显示合并提交,合并提交内容不多。

2.4 撤销操作

撤销操作不能被撤销

  1. git commit --amend--amend如果上一次的提交有问题,该选项可以重新提交。
    例如:提交时,某个文件忘记加到暂存区,可以做以下操作
    git commit -m 'Initial commit':首次提交(第一次提交)
    git add forgotten_file:将忘记添加的文件加入暂存区
    git commit --amend:重新提交(第二次提交)
    最后,第二次提交会替换第一次提交。
    git基础操作_第42张图片
    使用--amend重新提交时,是使用第二次的提交替换第一次的提交,第一次的提交并不会被记录在项目历史中。

2.4.1 取消暂存文件的暂存

取消已加入暂存区的文件
例如:有两个被修改的文件,想分两次提交更改,但我们使用了$ git add *,此时如何取消暂存其中的一个
git reset HEAD :取消暂存
git restore --staged :git 2.23.0版本以后都使用git restore代替
git基础操作_第43张图片

2.4.2 取消修改文件的修改

取消已修改但未加入暂存区的文件
git checkout --
git restore
git基础操作_第44张图片
撤销操作比较危险的指令,我们对这个文件进行的所有本地更改都会消失,git只是使用最后一个暂存或提交的文件替换了该文件。

2.5 远程工作

2.5.1 显示远程

git remote:查看配置了哪些远程服务器,显示简称。如果没有将看到origin,这是Git为克隆的服务器提供的默认名称
git基础操作_第45张图片
-v:可以显示一个URL
git基础操作_第46张图片
如果不止一个远程库,git将列出所有库的url和对应的简称,这样我们可以从这些库拉取内容或推送内容至这些库

2.5.2 添加远程仓库

git remote add <简称> :将一个远程库添加到git库中
git基础操作_第47张图片

2.5.3 从远程端获取拉取

git fetch

  1. git fetch :从远程项目中获取数据,指向远程项目,并从远程项目中获取你还没有的所有数据。
  2. 如果克隆了一个库,这个库会被自动的添加到"origin"下,使用git fetch origin可以获取自克隆以后该远程项目的任何新数据。
  3. git fetch只是将数据下载到本地库中,不会自动合并,需要手动合并。

git pull

  1. 如果当前分支设置了跟踪一个远程分支,使用git pull可以自动拉取远程分支,并合并到当前分支中
  2. 默认情况下,git clone会默认设置本地master分支跟踪克隆服务器上的master分支

2.5.4 向远程端推送

**git push **
git push :将你本地的master分支推送到远程克隆服务器master分支。
当有其他人正在向该远程项目推送内容时,你的推送会被拒绝,必须拿到他的推送内容以后才可以推送,即不能多人同时向同一个远程项目推送内容。

2.5.5 检查远程端

git remote show :查看远程项目更多信息,其中可以是远程项目的url也可以是简称
git基础操作_第48张图片

2.5.6 重命名或删除远程端

git remote rename:修改远程库的简称。
如,将origin改为zhao,$ git remote rename origin zhao

git remote remove 或 git remote rm:删除远程库。删除该引用以后,与该库相关的远程跟踪分支和配置设置也会被删除。

2.6 标记

2.6.1 列出标签

git tag:查看已存在的标签,-l或--list可选项
git基础操作_第49张图片
git tag -l "v1.8.5*":只查看v1.8.5*系列的标签,必须使用-l--list
git基础操作_第50张图片

2.6.2 创建标签

Git提供两种标签:轻量级标签和带注释的标签

  1. 轻量级标签:一个指向特定提交的指针
  2. 带注释的标签:将完整对象保存在Git数据库,它们是校验和,包含标记者姓名、电子邮箱和日期等等

2.6.3 带注释的标签

git tag -a v1.0 -m "version v1.0":在tag后使用-a创建标签,-m则为标签信息。如果创建时不使用-m,git会启动编辑器,可以输入标签信息。
git基础操作_第51张图片

2.6.4 轻量级标签

轻量级标签基本是存储在文件中的提交校验和,没有其它信息。
创建轻量级标签不要提供-a-s-m等选项,只需要一个标签名
git tag v1.2
git基础操作_第52张图片

2.6.5 稍后标记

如果你在提交以后,忘记进行标签。可以之后再进行标签,但需要提供要那次提交的校验和。
git基础操作_第53张图片
git tag -a v0.1 bcf4616 :对以前的某次提交创建标签,需要提供该次提交的校验和
git基础操作_第54张图片

2.6.6 共享标签

git push指令不能直接将标签传输到远程服务器,必须显式的将标签推送到共享服务器
git push origin :一次推送一个标签。--tags:一次推送多个标签,如git push origin --tags
这样其他人克隆你的库时,也会获取到所有标签
$ git push --tags:将推送轻量级标签和带注释的标签
$ git push --follow-tags:之推送带注释的标签

2.6.7 删除标签

git tag -d :删除本地库上的标签,记住这并没有删除远程库上的标签
git基础操作_第55张图片
删除远程库上的标签有两种方式:

  1. git push :refs/tags/
  2. git push origin --delete

2.6.8 迁出标记

如果想查看标记所对应的文件的版本,可以对该标记进行签出,但会使该存储库处于分离的HEAD状态。
git check
git基础操作_第56张图片
分离的HEAD状态:该状态下提交更改,标记将保持不变,新提交不属于任何分支且无法访问,除非使用提交哈希

2.7 Git别名

为git指令设置一个别名,这样在输入长指令时可以直接输入短的别名。这必须使用git config指令配置
git基础操作_第57张图片
如上,在给git commit设置别名以后,我们只需输入git ci就等同于git commit,大大提高了效率。

你可能感兴趣的:(Git,git,github)