最全的Git基本操作命令,看完它,就没有啥能难倒你了 获取G

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」。

本篇文章将涵盖你在使用 Git 完成各种工作中将要使用的各种基本命令。 在学习完本篇文章后,你能够配置并初始化一个仓库(repository)、开始或停止跟踪(track)文件、暂存(stage)或提交(commit)更改,如何浏览你的项目的历史版本以及不同提交(commits)间的差异,操作远程分支等。

获取Git仓库

初始化仓库

新建一个目录,然后我们进入该文件目录输入如下命令:

1
csharp复制代码git init

该命令会在这个目录下创建一个.git的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件。

克隆现有的仓库

假如你在github中创建了一个仓库或者你看中了一个开源项目想贡献一份自己的力量,就要把这个仓库拉下来,就需要进行clone操作

例如我在github中有一个仓库
image-20211102220952270

我现在把它clone下来

1
2
3
4
5
6
scss复制代码lirui@liruideMacBook-Pro IdeaProjects % git clone git@github.com:lrlr/git_learning.git
Cloning into 'git_learning'...
remote: Enumerating objects: 26, done.
remote: Total 26 (delta 0), reused 0 (delta 0), pack-reused 26
Receiving objects: 100% (26/26), done.
Resolving deltas: 100% (2/2), done.

Git基本操作命令

查看当前文件状态

1
lua复制代码git status

如果要查看目前文件处于什么状态,就需要用到此命令,通过这个命令可以查到文件是已更新,还是已暂存或者是未暂存等状态

1
2
3
4
5
6
7
8
9
10
11
12
vbnet复制代码​
 
 //示例
 lirui@liruideMacBook-Pro git_learning % git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
(use "git add <file>..." to include in what will be committed)
      .idea/

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

通过这个示例可以看到我有一个文件还处于Untracked就是未暂存状态。

还有一个命令可以查到更为细致的文件状态展示,叫状态简览命令

1
2
3
4
bash复制代码lirui@liruideMacBook-Pro git_learning % git status -s
AM .idea/workspace.xml
M README.md

每个文件前面都会有对应的字母,这些字母的含义是什么呢?

新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 你可能注意到了 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。 例如,上面的状态报告显示: .idea/workspace.xml 文件在工作区被修改了但还没暂存,README.md 文件被修改了并将修改后的文件放入了暂存区。

跟踪新文件

1
csharp复制代码git add

如果需要将一个新增的文件或者修改的文件加入到暂存状态,就需要使用跟踪命令

1
2
3
4
5
csharp复制代码//将本地所有的文件都加入到暂存区
git add .

// 只将指定的文件加入到暂存区
git add 具体的文件名

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

1
复制代码git diff

如果你想知道你对一个文件修改了哪些东西,就可以通过git diff命令来查看,例如我的README.md是已暂存的文件,然后我在里面新加了一句话,不暂存,我们来看下git diff 命令会显示什么

1
2
3
4
5
6
7
8
9
diff复制代码lirui@liruideMacBook-Pro git_learning % git diff
diff --git a/README.md b/README.md
index e77d1d2..eb87118 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
# git_learning
+这是我新加的一句话
\ No newline at end of file

这里可以看到就会把我修改的内容显示出来,注意,git diff命令只会展示未暂存的修改内容,如果你修改后暂存了就不会再显示你的修改

1
2
3
sql复制代码lirui@liruideMacBook-Pro git_learning % git add .
lirui@liruideMacBook-Pro git_learning % git diff
lirui@liruideMacBook-Pro git_learning %

提交更新

1
sql复制代码git commit

通过commit命令我们就可以将所有暂存的数据提交到本地数据库,例如如下命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ruby复制代码lirui@liruideMacBook-Pro git_learning % git commit
提交拉
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#       modified:   .idea/workspace.xml
#       modified:   README.md
:wq

这个命令需要你自行填写提交备注,保存后才能正式提交成功,这样操作其实很繁琐,我们还有一个简便的提交命令可以在提交命令当前行输入命令

1
2
3
4
5
6
7
sql复制代码git commit -m "备注内容"

//示例
lirui@liruideMacBook-Pro git_learning % git commit -m '提交'
[master dc733e0] 提交
2 files changed, 3 insertions(+), 3 deletions(-)
lirui@liruideMacBook-Pro git_learning %

跳过使用暂存区域

提交的数据必须是已经暂存的数据,每次进行提交操作还需要执行一下暂存命令,如何跳过暂存进行直接提交呢?

只需要给 git commit 加上 -a选项即可,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
perl复制代码lirui@liruideMacBook-Pro git_learning % git status
On branch master
Your branch is ahead of 'origin/master' by 4 commits.
(use "git push" to publish your local commits)

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
      modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
lirui@liruideMacBook-Pro git_learning %

这里可以看到我对README.md做了修改但是是未暂存的状态,这时候我们直接操作git commit -a看下是否能提交成功

1
2
3
4
sql复制代码lirui@liruideMacBook-Pro git_learning % git commit -a -m '跳过暂存'
[master 995917f] 跳过暂存
2 files changed, 2 insertions(+), 2 deletions(-)
lirui@liruideMacBook-Pro git_learning %

直接提交成功,这样就省去了我们多个操作命令,一个命令就可以完成提交

移除某个文件

1
bash复制代码git rm

如果想从Git中移除某个文件,可以使用git rm命令完成,这个命令不仅会将该文件从暂存区域移除,还会从工作目录中删除指定的文件。

1
2
3
4
5
6
bash复制代码lirui@liruideMacBook-Pro git_learning % ls
README.md
lirui@liruideMacBook-Pro git_learning % git rm README.md
rm 'README.md'
lirui@liruideMacBook-Pro git_learning % ls
lirui@liruideMacBook-Pro git_learning %

这里我移除了REDME.md文件,这个文件在我的目录中也同时被移除了

还有一种场景是我只想在Git仓库中删除文件,但希望在工作目录中保留,那么我们可以使用git rm –cached

1
2
3
4
5
6
7
8
9
10
11
12
13
vbnet复制代码//示例代码
lirui@liruideMacBook-Pro git_learning % git rm --cached README.md
rm 'README.md'
lirui@liruideMacBook-Pro git_learning % ls
README.md
lirui@liruideMacBook-Pro git_learning % git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
(use "git restore --staged <file>..." to unstage)
      deleted:   README.md

通过示例可以看到,README.md已经在Git中删除,但是在工作目录中还是完美保留的

查看提交历史

1
bash复制代码git log

如果你想查看你的提交历史,实现这个查看最简单的命令就是git log

image-20211102231540603

执行该命令就会列出你的所有提交记录,我的提交记录比较长,就截图展示了部分历史。

git log 有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。

一个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交w q

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sql复制代码lirui@liruideMacBook-Pro git_learning % git log -p -2
commit 028c66e79f8b5bf6c6176fc429bd7921561418bb (HEAD -> master, origin/master, origin/HEAD)
Author: lirui <630240701@qq.com>
Date:   Tue Nov 2 23:08:06 2021 +0800

  ss

diff --git a/README.md b/README.md
index 22ded55..3f151fa 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-:
\ No newline at end of file
+sssss
\ No newline at end of file

commit f41cf3a5a08507beec5792f91c0f45fa709e14db
Author: lirui <630240701@qq.com>
Date:   Tue Nov 2 23:06:06 2021 +0800

git log命令除了显示基本信息,还会显示一些commit 信息,如果你只想看到每次提交的简略统计信息,那可以使用 –stat选项

1
2
3
4
5
6
7
8
9
10
11
12
13
sql复制代码lirui@liruideMacBook-Pro git_learning % git log --stat
commit 028c66e79f8b5bf6c6176fc429bd7921561418bb (HEAD -> master, origin/master, origin/HEAD)
Author: lirui <630240701@qq.com>
Date:   Tue Nov 2 23:08:06 2021 +0800

  ss

README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

commit f41cf3a5a08507beec5792f91c0f45fa709e14db
Author: lirui <630240701@qq.com>
Date:   Tue Nov 2 23:06:06 2021 +0800

git log命令还支持许多其他选项,我就不一一列举了,我这里就展示一些供大家参考:image-20211102232203219

撤销操作

1
sql复制代码git commit --amend

有时候我们可能提交完之后发现自己的提交信息写错了,或者发现漏了几个文件没提交,就可以使用–admend命令来重新提交。

1
2
3
4
5
6
7
8
sql复制代码lirui@liruideMacBook-Pro git_learning % git commit -m '提交'
[master 97cdd20] 提交
2 files changed, 10 insertions(+), 4 deletions(-)
lirui@liruideMacBook-Pro git_learning % git commit -m '修改描述' --amend
[master 7a53706] 修改描述
Date: Tue Nov 2 23:58:32 2021 +0800
2 files changed, 10 insertions(+), 4 deletions(-)
lirui@liruideMacBook-Pro git_learning %

最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。

取消暂存的文件

1
perl复制代码git reset HEAD

当你有两个文件都还没有暂存,这时你只想暂存一个文件,结果不小心执行了git add .,这时需要取消某个文件的暂存状态,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
perl复制代码# 两个文件均已暂存
lirui@liruideMacBook-Pro git_learning % git status
Changes to be committed:
      modified:   README.md
      modified:   test.md

# 取消test文件的暂存
lirui@liruideMacBook-Pro git_learning % git reset HEAD test.md
Unstaged changes after reset:
M       test.md

# 查看状态,test文件变成了未暂存状态
lirui@liruideMacBook-Pro git_learning % git status            
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
      modified:   test.md

查看远程仓库

1
复制代码git remote

如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。它会列出你指定的远程服务器的简写,如果你想看到这个简写对应的远程服务器的url,可以指定选项 -v

1
2
3
4
5
scss复制代码lirui@liruideMacBook-Pro git_learning % git remote
origin
lirui@liruideMacBook-Pro git_learning % git remote -v
origin  git@github.com:lrlr/git_learning.git (fetch)
origin  git@github.com:lrlr/git_learning.git (push)

添加远程仓库

运行 git remote add <shortname> <url> 添加一个新的远程 Git 仓库

1
2
3
4
5
6
7
scss复制代码lirui@liruideMacBook-Pro git_learning % git remote add mg git@github.com:lrlr/git_learning.git
lirui@liruideMacBook-Pro git_learning % git remote -v
mg      git@github.com:lrlr/git_learning.git (fetch)
mg      git@github.com:lrlr/git_learning.git (push)
origin  git@github.com:lrlr/git_learning.git (fetch)
origin  git@github.com:lrlr/git_learning.git (push)

从远程仓库拉取

1
css复制代码git fetch [remote-name]

这个命令会访问远程仓库,从中拉取所有你还没有的数据。

注意它并不会自动合并或修改你当前的工作,当准备好时你必须手动将其合并入你的工作。

如何你想拉取后自动合并远程分支到当前分支,可以使用git pull

推送到远程分支

1
css复制代码git push [remote-name] [branch-name]

例如你想讲本地master分支推送远程分支origin上,可以进行如下操作

1
2
3
4
5
6
7
8
9
10
css复制代码lirui@liruideMacBook-Pro git_learning % git push origin master
Enumerating objects: 17, done.
Counting objects: 100% (17/17), done.
Delta compression using up to 8 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (13/13), 1.25 KiB | 1.25 MiB/s, done.
Total 13 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To github.com:lrlr/git_learning.git
  028c66e..1be830c master -> master

现在,你可以完成所有基本的 Git 本地操作-创建或者克隆一个仓库、做更改、暂存并提交这些更改、浏览你的仓库从创建到现在的所有更改的历史、撤销、取消暂存、查看、拉取、推送远程分支。 下一篇文章我将介绍Git最有亮点的功能,Git分支,还没有关注我的小伙伴赶紧关注一波吧,带你畅游Git的世界。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%