如何使用git add,git status,git commit和git diff

时间:2020-03-21 11:42:24  来源:igfitidea点击:

让我们进入克隆了远程存储库的项目目录。
在新克隆的存储库中运行git status命令将显示以下信息。

$ git status

# On branch master

nothing to commit (working directory clean)

git status的结果向我们展示了两件事,即我们拥有一个非常干净的存储库,这意味着我们只是克隆了该存储库,并且没有修改该目录中的任何文件。
该目录中的每个文件都会被跟踪,但不会跟踪任何文件,因为这是我们已克隆的新存储库。

status命令还告诉我位于哪个分支,它告诉我们位于“ master”分支中。
稍后我将解释分支。

现在让我们在存储库目录中添加一个新文件,我们将保留文件名test。
在存储库中添加文件“ test”之后,git status命令将向我们展示以下内容。

$ git status

# On branch master

# Untracked files:

# (use "git add <file>..." to include in what will be committed)

#

# test

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

状态输出显示存在一个名为“ test”的未跟踪文件,请运行命令“ git add test”以开始跟踪该文件。
请注意,状态结果中未跟踪文件标题下提到了测试文件名。

注意:每当git在存储库中看到新文件时,除非我们要求git这样做,否则它不会开始跟踪该文件。

现在,通过“ git add”命令开始跟踪我们新创建的文件“ test”。

$git add test

现在重新运行git status命令将显示:

$ git status

# On branch master

# Changes to be committed:

# (use "git reset HEAD <file>..." to unstage)

#

# new file: test

#

#我们可以从状态输出中看到我们的新文件包含在下一次提交中。
现在已经暂存了我们的新文件“ test”(这意味着将在下一次提交中将其放入快照中)并进行跟踪。

现在让我们来了解一下thin,如果我们将目录名称传递给“ git add”命令,它将使用目录中的所有文件进行暂存或者开始跟踪它们。
“ Git add”命令是一个多用途命令,我们可以如上所述开始跟踪文件,也可以暂存文件等。

现在,让我们更改存储库中已经存在的文件,如果假设我们已经跟踪了除“ test”文件之外的名为“ test1”的文件。
编辑“ test1”文件后,git status命令输出将如下所示。

$ git status

# On branch master

# Changes to be committed:

# (use "git reset HEAD <file>..." to unstage)

#

# new file: test

#

# Changed but not updated:

# (use "git add <file>..." to update what will be committed)

#

# modified: test1

现在我们可以看到“ test1”文件似乎在名为“ changed but not updates”的部分中,这表明该文件已修改但尚未暂存。
借助git add命令,我们可以暂存修改后的文件。

$ git add test1

现在 git status输出将显示以下内容。

$ git status

# On branch master

# Changes to be committed:

# (use "git reset HEAD <file>..." to unstage)

#

# new file: test

# modified: test1

这清楚地表明“ test”是一个新文件,而“ test1”已被修改。
现在,这些test和test1文件都在暂存区中,并将在下一次提交时转到快照。

这里要了解的重要一点是,如果我们再次修改任何文件,则需要再次运行git add <filename>,否则git commit将在我们上次运行git add时采用文件的状态,而不是当前的。
这意味着我们每次修改文件时都需要运行git add(实际上不是这种情况,这可以通过另一种方式完成。
稍后会介绍)。

现在,让我们了解一下,存储库中有一个名为.gitignore的特殊文件。
如果我们需要某些文件,而不是在git status命令中进行跟踪或者列出(这意味着我们不希望在任何提交中都包含某些文件),则可以在.gitignore文件中包含这些文件的模式。

假设我们不想跟踪以.gz扩展名结尾的文件,则可以将它们包括在.gitignore文件中。

$ vi .gitignore

*.gz

Git status命令只会让我们知道暂存区中的内容,它会告诉我们是否存在一些未跟踪的文件等。
但是,如果我们将文件的先前状态与当前状态区分开,它不会显示出确切的区别。
修改了一个文件。

Git diff命令将向我们显示确切的差异,或者说如果我们向文件中添加了一些行,它将向我们显示被修改的那些行。

一个简单的“ git diff”命令将告诉我们文件的当前状态与暂存区域中的文件状态之间的区别。

“ git diff --cached”或者“ git diff –staged”将比较暂存状态和最后提交状态。

非常清楚地说明这一区别,即“ git diff”将仅向我们显示暂存状态和当前状态之间的差异。
“ git diff –staged”将向我们显示已暂存的文件和上次提交之间的差异。

而且,如果我们已通过“ git add”命令进行了所有更改/修改,则“ git diff”将不会显示任何输出,因为已暂存状态与当前状态之间没有区别。

现在,如果我们已上演所有更改,则提交更改。
可以通过以下方式进行提交。

$git commit

运行上面的“ git commit”将启动一个编辑器(可以通过git config --global core.editor命令在git中的变量设置此编辑器)

在编辑器中,我们可以输入与修改存储库相关的消息。

或者,我们可以在一个命令中自己完成所有这些操作。

$git commit -m “modified test and added test1 file"

现在,我们已经提交了对存储库的更改。
提交将为我们提供一些输出,例如提交的分支名称,校验或者哈希。
因此,在此提交中,暂存区中的所有内容都被发送给了快照。

我们可以在修改文件后轻松跳过我们执行的每个“ git add”操作,以通过“ git commit”命令中的以下选项将它们暂存。

$git commit -a -m “your message"

-a选项将在提交之前将所有已跟踪的文件添加到暂存区。

注意:即使我们已经在存储库中创建了一个新文件,仍需要通过“ git add”命令开始对其进行跟踪,并首次通过“ git add”进行暂存。
然后,我们可以通过“ git commit”命令中的-a选项轻松地上载并提交修改。