Git   发布时间:2022-05-05  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Git 系列教程(5)- 记录每次更新到仓库大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

文件状态

你工作目录下的每一个文件只有两种状态:tracked 或 untracked

 

tracked

  • 已跟踪 tracked 的文件是指那些被纳入了版本控制的文件
  • 在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改unmodified、已@L_43_5@modified 或已放入暂存区staged
  • 简单来说,已跟踪 tracked 的文件就是 Git 知道的文件

 

untracked

  • 工作目录中除 tracked 文件外的其它所有文件都属于 untracked 文件
  • 它们既不存在于上次快照的记录中,也没有被放入暂存区
  • 初次 clone 某个仓库的时候,工作目录中的所有文件都属于 tracked 文件,并处于 unmodified
  • 编辑文件后,Git 将它们标记为 modified 文件。 在工作时,你可以选择性地将这些修改过的文件放入暂存区,然后提交所有已暂存的修改

 

文件的状态变化周期

Git 系列教程(5)- 记录每次更新到仓库

 

检查当前文件状态

可以用 git status@H_673_55@ 命令查看哪些文件处于什么状态。 如果在克隆仓库后立即使用此命令,会看到类似这样的输出

@H_675_59@git status
On branch master
Your branch is up-to-date with 'origin/master'@H_675_59@.
nothing to commit,working directory clean

可以获取到的内容

  • 所有 tracked 件在上次提交后都未被更改过
  • 当前目录下没有出现任何 untracked 的新文件,否则 Git 会在这里列出来
  • 显示了当前所在分支,并告诉你这个分支同远程服务器上对应的分支没有偏离,现在,分支名是“master”,这是认的分支名

 

在项目下创建一个新的 README@H_673_55@ 文件,使用 git status@H_673_55@ 命令,将看到一个新的 untracked 文件

@H_675_59@echo @H_735_63@my Project' >@H_675_59@ README
$ git status
On branch master
Your branch is up-to-@H_675_59@.
Untracked files:
  (use "git add <file>..." to include @H_675_59@in@H_675_59@ what will be committed)

    README

nothing added to commit but untracked files present (use git add" to track)

可以获取到的内容

  •  README@H_673_55@ 文件出现在 Untracked files@H_673_55@ 下面
  • untracked 的文件意味着 Git 在之前的快照(提交)中没有这些文件

 

如何跟踪

@H_675_59@git add 文件名

# 更新目录下所有文件
git add .

后面会再详细讲这个命令

 

跟踪新文件

使用命令 git add@H_673_55@ 开始跟踪一个文件。 所以,要跟踪 README@H_673_55@ 文件,运行:

git add README

 

此时再运行 git status@H_673_55@ 命令,会看到 README@H_673_55@ 文件已被跟踪,并处于 staged

@H_675_59@.
Changes to be committed:
  (use git restore --staged <file>..."@H_675_59@ to unstagE)

    new @H_675_59@file:   README

可以获取到的内容

  • 只要在 Changes to be committed@H_673_55@ 这行下面的,就说明是 staged 状态
  • 如果此时提交,那么该文件在你运行 git add@H_673_55@ 时的版本将被留存在后续的历史记录中

 

暂存已修改文件

如果修改一个名为 CONTRIBUTinG.md@H_673_55@ 的已被 tracked 的文件,然后运行 git status@H_673_55@ 命令,会看到下面内容

@H_675_59@git reset HEAD <file>...file@H_675_59@:   README

Changes not staged @H_675_59@for@H_675_59@ commit:
  (use  to update what will be committed)
  (use git checkout -- <file>..." to discard changes @H_675_59@ working directory)

    modified:   CONTRIBUTinG.md

可以获取到的内容

  • CONTRIBUTinG.md@H_673_55@ 出现在 Changes not staged for commit@H_673_55@ 这行下面,说明已跟踪文件内容发生了变化,但还没有放到暂存区
  • 要暂存这次更新,需要运行 git add@H_673_55@ 命令

 

再次运行 git add 命令

运行 git add@H_673_55@ 将“CONTRIBUTinG.md”放到暂存区,然后再看看 git status@H_673_55@ 的输出

@H_675_59@$ git add CONTRIBUTinG.md
$ git status
On branch master
Your branch is up-to-@H_675_59@:   README
    modified:   CONTRIBUTinG.md

 

再次修改文件内容

编辑 CONTRIBUTinG.md@H_673_55@,再运行 git status@H_673_55@ 看看

@H_675_59@$ vim CONTRIBUTinG.md
$ git status
On branch master
Your branch is up-to-@H_675_59@:   README
    modified:   CONTRIBUTinG.md

Changes not staged @H_675_59@ working directory)

    modified:   CONTRIBUTinG.md

可以获取到的内容

  • CONTRIBUTinG.md@H_673_55@ 文件同时出现在暂存区和非暂存区
  • 实际上 Git 只不过暂存了运行 git add@H_673_55@ 命令时的版本
  • 如果你现在提交代码CONTRIBUTinG.md@H_673_55@ 的版本是你最后一次运行 git add@H_673_55@ 命令时的那个版本,而不是当前版本
  • 所以,运行了 git add@H_673_55@ 之后又编辑了文件,需要再次 git add@H_673_55@ 把最新版本暂存
@H_675_59@:   README
    modified:   CONTRIBUTinG.md
 

真实的实际操作栗子

Git 系列教程(5)- 记录每次更新到仓库

 

状态简述

  • git status@H_673_55@ 命令的输出十分详细,但其用语有些繁琐
  • git status -s@H_673_55@ 或 git status --short@H_673_55@ ,输出结果更加简洁
git status -@H_675_59@s
 M markers.py
 M test.py
D  test_func01.py
D  test_login.py
?? text.txt

查看已暂存和未暂存的修改

修改 README 文件后暂存,然后编辑 CONTRIBUTinG.md@H_673_55@ 文件后先不暂存, 运行 status@H_673_55@ 命令将会看到:

@H_675_59@$ git status
On branch master
Your branch is up-to-@H_675_59@ to unstagE)

    modified:   README

Changes not staged @H_675_59@ working directory)

    modified:   CONTRIBUTinG.md

 

初次使用 git diff

要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff@H_673_55@:

$ git @H_675_59@diff
@H_675_59@diff --git a/CONTRIBUTinG.md b/@H_675_59@CONTRIBUTinG.md
index 8ebb991..643e24f 100644
--- a/@H_675_59@CONTRIBUTinG.md
+++ b/@H_675_59@CONTRIBUTinG.md
@@ -65,7 +8@H_675_59@ @@ branch directly,things can get messy.
 Please include a @H_675_59@nice@H_675_59@ description of your changes when you submit your PR;
 @H_675_59@if we have to read the whole @H_675_59@diff to figure out why youre contribuTing
 @H_675_59@in the first place,youre less likely to get @L_696_78@BACk and have your change
-merged @H_675_59@.
+merged @H_675_59@in. Also,@H_675_59@split your changes into comprehensive chunks @H_675_59@if your @H_675_59@patch@H_675_59@ is
+@H_675_59@longer than a dozen lines.

 If you are starTing to work on a particular area,feel @H_675_59@free@H_675_59@ to submit a PR
 that highlights your work @H_675_59@in progress (and note @H_675_59@in the PR title that its

 

实际栗子

Git 系列教程(5)- 记录每次更新到仓库

 

git diff 的作用 

  • 比较的是当前文件和暂存区快照之间的差异,也就是修改之后还没有暂存起来的变化内容
  • 若要查看已暂存且要添加到下次提交里的内容,可以用 git diff --staged@H_673_55@ 命令
  • 会比较已暂存文件与最后一次提交的文件差异
$ git @H_675_59@diff --@H_675_59@staged
@H_675_59@diff --git a/README b/@H_675_59@README
new @H_675_59@file mode 100644@H_675_59@
index 0000000@H_675_59@..03902a1
--- /dev/@H_675_59@null
+++ b/@H_675_59@README
@@ -0,1)">0 +1@H_675_59@ @@
+My Project

 

git diff

git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动,所以有时候一下子暂存了所有更新过的文件,运行 git diff@H_673_55@ 后却什么也没有

像之前说的,暂存 CONTRIBUTinG.md@H_673_55@ 后再编辑,可以使用 git status@H_673_55@ 查看已被暂存的修改或未被暂存的修改。 如果我们的环境(终端输出)看起来如下:

@H_675_59@$ git add CONTRIBUTinG.md
$ @H_675_59@# test line' >>@H_675_59@ CONTRIBUTinG.md
$ git status
On branch master
Your branch is up-to-@H_675_59@ to unstagE)

    modified:   CONTRIBUTinG.md

Changes not staged @H_675_59@ working directory)

    modified:   CONTRIBUTinG.md

 

现在运行 git diff@H_673_55@ 看暂存前后的变化:

$ git @H_675_59@CONTRIBUTinG.md
index 643e24f..87f08c8 119,1)">3 +4@H_675_59@ @@ at the
 ## Starter Projects

 See our [projects list](https:@H_675_59@//@H_675_59@github.com/libgit2/libgit2/blob/development/PROjeCTs.md).
+# test line

 

然后用 git diff --cached@H_673_55@ 查看已经暂存起来的变化( --staged@H_673_55@ 和 --cached@H_673_55@ 是同义词):

$ git @H_675_59@cached
@H_675_59@s

 

实际栗子

Git 系列教程(5)- 记录每次更新到仓库

 

提交更新

  • 现在的暂存区已经准备就绪,可以提交了
  • 在此之前,请务必确认还有什么已修改或新建的文件还没有 git add@H_673_55@ 过, 否则提交的时候不会记录这些尚未暂存的变化
  • 这些已修改但未暂存的文件只会保留在本地磁盘
  • 所以,每次准备提交前,先用 git status@H_673_55@ 看下,你所需要的文件是不是都已暂存起来了, 然后再运行提交命令 git commit@H_673_55@:
git commit -m test"

Git 系列教程(5)- 记录每次更新到仓库

可以获取到的内容

  • commit 之后 git status 可以看到本地是干净的
  • 提交后会显示当前是在哪个分支(@H_133_54@master@H_673_55@)提交的
  • 本次提交的完整 SHA-1 校验和是什么(9a8c6b3@H_673_55@)
  • 以及在本次提交中,有多少文件修订过,多少行添加和删改过

 

重点

  • 提交时(git commit)记录的是放在暂存区域的快照
  • 每一次运行提交操作,都是对项目作一次快照,以后可以回到指定快照版本,或者进行比较

 

跳过使用暂存区域

  • Git 提供了一个跳过使用暂存区域的方式
  • git commit@H_673_55@ 加上 -a@H_673_55@ 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add@H_673_55@ 步骤

Git 系列教程(5)- 记录每次更新到仓库

-a@H_673_55@ 选项使本次提交包含了所有修改过的文件,但是要小心,有时这个选项会将不需要的文件添加到提交中

 

移除文件

两种情况

直接看栗子

Git 系列教程(5)- 记录每次更新到仓库

已跟踪的文件(出现在暂存区)的文件被执行 git rm --cached 命令后,它会被移出暂存区,重新变成一个未跟踪的文件

 

移动文件

在 Git 中对文件改名

$ git @H_675_59@mv file_from file_to

 

查看状态信息,也会看到关于重命名操作的说明

Git 系列教程(5)- 记录每次更新到仓库

文件自动提交到暂存区,且不需要手动执行 git add 

 

其实,运行 git mv@H_673_55@ 就相当于运行了下面三条命令

$ @H_675_59@mv@H_675_59@ README.md README
$ git @H_675_59@rm@H_675_59@ README.md
$ git add README

 

大佬总结

以上是大佬教程为你收集整理的Git 系列教程(5)- 记录每次更新到仓库全部内容,希望文章能够帮你解决Git 系列教程(5)- 记录每次更新到仓库所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: