Git 常用操作(5)- git clone/git checkout -b/git diff/git push/git pull

本文深入讲解Git的高级操作,包括远程仓库的克隆、分支的拉取与推送、提交的优化及日志的查看,帮助读者掌握团队协作下的Git使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. git clone——获取远程仓库

当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。它只会获取数据然后 让你自己合并。

然而,有一个命令叫作 git pull 在大多数情况下它的含义是一个 git fetch 紧接着一个 git merge 命令。如果有一个像之前章节中演示的设置好的跟踪分支,不管它是显式地设置还是通过 clone 或 checkout 命令为你创建的,git pull 都会查找当前分支所跟踪的服务器与分支,从服务器上抓取数据然后尝试合并入那个远程分支。

  1. 获取远程仓库
$ git clone git@github.com:github-book/git-tutorial.git
Cloning into 'git-tutorial'...
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 20 (delta 3), reused 20 (delta 3)
Receiving objects: 100% (20/20), done.
Resolving deltas: 100% (3/3), done.
$ cd git-tutorial

执行 git clone 命令后我们会默认处于 master 分支下,同时系统会自动将 origin 设置成该远程仓库的标识符。也就是说,当前本地仓库的 master 分支与 GitHub 端远程仓库(origin)的 master 分支在内容上是完全相同的。

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/feature-D
  remotes/origin/master

我们用 git branch -a 命令查看当前分支的相关信息。添加 -a 参数可以同时显示本地仓库和远程仓库的分支信息。

  1. 获取远程的 feature-D 分支
$ git checkout -b feature-D origin/feature-D
Branch feature-D set up to track remote branch feature-D from origin.
Switched to a new branch 'feature-D'

-b 参数的后面是本地仓库中新建分支的名称。为了便于理解,我们仍将其命名为 feature-D,让它与远程仓库的对应分支保持同名。新建分支名称后面是获取来源的分支名称。例子中指定了origin/feature-D,就是说以名为 origin 的仓库(这里指GitHub 端的仓库)的 feature-D 分支为来源,在本地仓库中创建feature-D 分支。

  1. 向本地的feature-D 分支提交更改

现在假定我们是另一名开发者,要做一个新的提交。在 README.md 文件中添加一行文字,查看更改。

$ git diff
diff --git a/README.md b/README.md
index af647fd..30378c9 100644
--- a/README.md
+++ b/README.md
@@ -3,3 +3,4 @@
- feature-A
- fix-B
- feature-C
+ - feature-D

提交

$ git commit -am "Add feature-D"
[feature-D ed9721e] Add feature-D
1 file changed, 1 insertion(+)
  1. 推送feature-D 分支
$ git push
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 281 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
ca0f98b..ed9721e feature-D -> feature-D

从远程仓库获取 feature-D 分支,在本地仓库中提交更改,再将 feature-D 分支推送回远程仓库,通过这一系列操作,就可以与其他开发者相互合作,共同培育 feature-D 分支,实现某些功能。

2. git pull——获取最新的远程仓库分支

这边的本地仓库中只创建了 feature-D 分支,并没有在 feature-D 分支中进行任何提交。然而远程仓库的 feature-D 分支中已经有了我们刚刚推送的提交。这时我们就可以使用 git pull 命令,将本地的 feature-D 分支更新到最新状态。当前分支为 feature-D 分支。

$ git pull origin feature-D
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1)
Unpacking objects: 100% (3/3), done.
From github.com:github-book/git-tutorial
* branch feature-D -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Fast-forwarded feature-D to ed9721e686f8c588e55ec6b8071b669f411486b8.

GitHub 端远程仓库中的 feature-D 分支是最新状态,所以本地仓库中的 feature-D 分支就得到了更新。今后只需要像平常一样在本地进行提交再 push 给远程仓库,就可以与其他开发者同时在同一个分支中进行作业,不断给 feature-D 增加新功能。

Git 保存密码

https://blog.csdn.net/youanyyou/article/details/78992990

3. Git 基本操作

3.5 提交已修改文件 (git commit)

git commit 命令可以将当前暂存区中的文件实际保存到仓库的历史记录中。

  1. 记述一行提交信息

    $ git commit -m "First commit"
    [master (root-commit) 9f129ba] First commit
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 README.md
    

    -m 参数后的"First commit"称作提交信息,是对这个提交的概述。

  2. 记述详细提交信息

    如果想要记述得更加详细,请不加-m,直接执行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
    #
    # Initial commit
    #
    # Changes to be committed:
    #   (use "git rm --cached <file>..." to unstage)
    #
    # new file: README.md
    #
    

    在编辑器中记述提交信息的格式如下:

    • 第一行:用一行文字简述提交的更改内容
    • 第二行:空行
    • 第三行以后:记述更改的原因和详细内容

只要按照上面的格式输入,今后便可以通过确认日志的命令或工具看到这些记录。在以#(井号)标为注释的Changes to be committed(要提交的更改)栏中,可以查看本次提交中包含的文件。将提交信息按格式记述完毕后,请保存并关闭编辑器,以 #(井号)标为注释的行不必删除。随后,刚才记述的提交信息就会被提交。

  1. 终止提交

    如果在编辑器启动后想中止提交,请将提交信息留空并直接关闭编辑器,随后提交就会被中止。

  2. 查看提交后的状态

    执行完git commit命令后再来查看当前状态。

    $ git status
    # On branch master
    nothing to commit, working directory clean
    

    当前工作树处于刚刚完成提交的最新状态,所以结果显示没有更改。

3.6 跳过暂存区直接提交

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

3.7 忽略文件

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以创建一个名为 .gitignore
的文件,列出要忽略的文件模式。来看一个实际的例子:

$ cat .gitignore
*.[oa]
*~

第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。

文件 .gitignore 的格式规范如下:

• 所有空行或者以 # 开头的行都会被 Git 忽略。

• 可以使用标准的 glob 模式匹配。

• 匹配模式可以以(/)开头防止递归。

• 匹配模式可以以(/)结尾指定目录。

• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。

星号(*)匹配零个或多个任意字符;

[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);

问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9] 表示匹配所有 0 到 9 的数字)。

使用两个星号(**) 表示匹配任意中间目录,比如a/**/z 可以匹配 a/z,
a/b/z 或 a/b/c/z等。

3.8 查看提交日志(git log)

$ git log
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:49 2013 +0900
First commit

默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。

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

  1. 只显示提交信息的第一行

    如果只想让程序显示第一行简述信息,可以在git log命令后加上–pretty=short,有另外还
    有 short,full 和 fuller 参数可以使用。

    $ git log --pretty=short
    commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
    Author: hirocaster <hohtsuka@gmail.com>
    First commit
    
  2. 只显示指定目录、文件的日志

    只要在git log命令后加上目录名,便会只显示该目录下的日志。如果加的是文件名,就会只显示与该文件相关的日志。

    $ git log README.md
    
  3. 显示每次提交的内容差异

    如果想查看提交所带来的改动,可以加上 -p 参数,文件的前后差别就会显示在提交信息之后。也可以加上 -2 来仅显示最近两次提交

    $ git log -p -2 README.md
    
  4. git log --graph——以图表形式查看分支

    用git log --graph命令进行查看的话,能很清楚地看到特性分支(feature-A)提交的内容已被合并。除此以外,特性分支的创建以
    及合并也都清楚明了。

    $ git log --graph
    * commit 83b0b94268675cb715ac6c8a5bc1965938c15f62
    |\ Merge: fd0cbf0 8a6c8b9
    | | Author: hirocaster <hohtsuka@gmail.com>
    | | Date: Sun May 5 16:37:57 2013 +0900
    | |
    | | Merge branch 'feature-A'
    | |
    | * commit 8a6c8b97c8962cd44afb69c65f26d6e1a6c088d8
    |/ Author: hirocaster <hohtsuka@gmail.com>
    | Date: Sun May 5 16:22:02 2013 +0900
    |
    | Add feature-A
    |
    * commit fd0cbf0d4a25f747230694d95cac1be72d33441d
    | Author: hirocaster <hohtsuka@gmail.com>
    | Date: Sun May 5 16:10:15 2013 +0900
    |
    | Add index
    |
    * commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
    Author: hirocaster <hohtsuka@gmail.com>
    Date: Sun May 5 16:06:49 2013 +0900
    First commit
    

3.9 查看已暂存和未暂存的修改差异(git diff)

git diff 命令可以查看工作树、暂存区、最新提交之间的差别。

  1. 查看工作树和暂存区的差别

    $ git diff
    diff --git a/README.md b/README.md
    index e69de29..cb5dc9f 100644
    --- a/README.md
    +++ b/README.md
    @@ -0,0 +1 @@
    +# Git教程
    

    由于我们尚未用git add命令向暂存区添加任何东西,所以程序只会显示工作树与最新提交状态之间的差别。 “+”号标出的是新添加的行,被删除的行则用“-”号标出。我们可以看到,这次只添加了一行。

  2. 查看工作树和最新提交的差别

    要查看与最新提交的差别,请执行以下命令

    $ git diff HEAD
    diff --git a/README.md b/README.md
    index e69de29..cb5dc9f 100644
    --- a/README.md
    +++ b/README.md
    @@ -0,0 +1 @@
    +# Git教程
    

    不妨养成这样一个好习惯:在执行git commit命令之前先执行 git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交。这里的 HEAD 是指向当前分支中最新一次提交的指针。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wohu007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值