Datawhale 学习git-第二节

这篇具有很好参考价值的文章主要介绍了Datawhale 学习git-第二节。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2.3 查看提交历史 -git log

简单查看提交历史

  • 使用 git log 不带任何参数,会按时间先后顺序列出所有提交,最新的排在最上面。

  • 默认显示的信息包括提交的哈希值、作者信息、日期和提交信息。

查看详细的提交差异

  • 使用 git log -pgit log --patch 查看每次提交的详细差异(补丁格式)。

  • 这有助于理解每次提交具体修改了哪些内容。

$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number#它是开发者在执行 git commit 时写入的消息,用于简要描述此次提交所做的更改。

diff --git a/Rakefile b/Rakefile#表示这个差异比较是针对 Rakefile 文件的。这里的 a/Rakefile 和 b/Rakefile 分别代表修改前后的文件版本。
index a874b73..8f94139 100644
#显示了文件的 Git 索引哈希值变化以及文件模式。这里,a874b73 和 8f94139 分别是文件变更前后的哈希值。
#100644 是文件的 UNIX 权限模式,表示这是一个普通文件。
--- a/Rakefile
+++ b/Rakefile
#表示这个差异比较是从 a/Rakefile(旧版本)到 b/Rakefile(新版本)。
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'#是一个代码区段的引用标记,说明接下来的更改发生在文件的第 5 行。
 spec = Gem::Specification.new do |s|
     s.platform  =   Gem::Platform::RUBY
     s.name      =   "simplegit"
-    s.version   =   "0.1.0"#表示从文件中移除了这一行。- 符号表示旧行。
+    s.version   =   "0.1.1"#表示在文件中添加了这一行。+ 符号表示新行。
     s.author    =   "Scott Chacon"
     s.email     =   "schacon@gee-mail.com"
     s.summary   =   "A simple gem for using Git in Ruby code."

限制日志条目数量

  • 通过添加 -n 选项(如 -2)来限制输出的日志条目数量。

  • 例如,git log -p -2 显示最近两次提交的详细信息。

显示每次提交的统计信息

  • 使用 git log --stat 查看每次提交的文件修改统计信息。

$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

 Rakefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
#Rakefile 文件发生了变化,总共有 1 行插入和 1 行删除。
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test

 lib/simplegit.rb | 5 -----
 1 file changed, 5 deletions(-)
#lib/simplegit.rb 文件有 5 行被删除。
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

 README           |  6 ++++++
 Rakefile         | 23 +++++++++++++++++++++++
 lib/simplegit.rb | 25 +++++++++++++++++++++++++
 3 files changed, 54 insertions(+)
 #README 文件新增了 6 行。
#Rakefile 文件新增了 23 行。
#lib/simplegit.rb 文件新增了 25 行。
#总共有 54 行新增。
  • 它会列出每次提交更改的文件、更改的行数等。

自定义日志输出

  • 使用 git log --pretty=format:"..." 自定义输出格式。

  • 例如,git log --pretty=format:"%h - %an, %ar : %s" 显示简短的哈希值、作者名、相对日期和提交信息。

  • --pretty 有几个内建选项,如 onelineshortfull 等。

图形化展示历史

  • 使用 git log --graph 在日志旁以 ASCII 图形显示分支和合并历史。

  • 当结合 --pretty=format:"..." 使用时,可以更直观地理解历史。

2.3.1 限制输出长度 -git log -since n

限制输出长度的选项

  • 最近提交限制:使用 -n(例如 -2)来仅显示最近的 n 条提交。这在快速浏览最新更改时很有帮助。

时间限制选项

  • 按时间过滤:--since--until(或 --after--before)选项允许根据时间过滤提交。例如,git log --since=2.weeks 会显示过去两周的所有提交。

  • 时间格式:可以使用具体日期(如 "2008-01-15")或相对日期(如 "2 years 1 day 3 minutes ago")。

提交内容过滤

  • 作者过滤:--author 选项用于仅显示特定作者的提交。

  • 提交信息过滤:--grep 选项用于搜索包含特定关键字的提交信息。

  • 组合过滤:使用多个 --author--grep 条件进行搜索,--all-match 选项则要求提交必须匹配所有条件。

特定内容变更过滤

  • 内容变更过滤:-S 选项仅显示添加或删除了特定内容的提交。例如,git log -S function_name 用于查找引用特定函数的更改。

路径限制

  • 路径过滤:在命令的最后指定文件或目录路径,仅显示这些路径的历史提交。例如,git log -- [path]

  • 实例

 
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number#它是开发者在执行 git commit 时写入的消息,用于简要描述此次提交所做的更改。

diff --git a/Rakefile b/Rakefile#表示这个差异比较是针对 Rakefile 文件的。这里的 a/Rakefile 和 b/Rakefile 分别代表修改前后的文件版本。
index a874b73..8f94139 100644
#显示了文件的 Git 索引哈希值变化以及文件模式。这里,a874b73 和 8f94139 分别是文件变更前后的哈希值。
#100644 是文件的 UNIX 权限模式,表示这是一个普通文件。
--- a/Rakefile
+++ b/Rakefile
#表示这个差异比较是从 a/Rakefile(旧版本)到 b/Rakefile(新版本)。
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'#是一个代码区段的引用标记,说明接下来的更改发生在文件的第 5 行。
 spec = Gem::Specification.new do |s|
     s.platform  =   Gem::Platform::RUBY
     s.name      =   "simplegit"
-    s.version   =   "0.1.0"#表示从文件中移除了这一行。- 符号表示旧行。
+    s.version   =   "0.1.1"#表示在文件中添加了这一行。+ 符号表示新行。
     s.author    =   "Scott Chacon"
     s.email     =   "schacon@gee-mail.com"
     s.summary   =   "A simple gem for using Git in Ruby code."

2.4 撤销操作 --git commit --amend

修改最后一次提交

  • 使用 --amend:如果你在提交后发现遗漏了文件的添加或提交信息有误,可以使用 git commit --amend 来修改最后一次提交。这不会创建一个新的提交,而是替换上一次的提交。

  • 操作效果:如果没有新的更改,它仅修改提交信息。如果有新的更改被暂存,它会将这些更改包含在新的提交中。

  1. 取消暂存文件

    1. 使用 git reset HEAD <file>:如果错误地暂存了文件,可以使用此命令取消暂存。

    2. 操作安全性:这个命令相对安全,因为它不会影响工作目录中的文件内容。

  2. 撤消文件修改

    1. 使用 git checkout -- <file>:如果你想撤消对文件的修改并恢复到上次提交的状态,可以使用此命令。

    2. 操作风险:这是一个危险的操作,因为它会永久删除工作目录中的所有更改。只有当你确信不再需要这些本地更改时,才应使用此命令。

注意事项

  • 撤消提交的不可逆性:需要注意的是,某些撤消操作(如 git commit --amendgit checkout -- <file>)是不可逆的。这意味着,一旦执行这些操作,之前的工作可能会丢失。

  • 数据恢复:在 Git 中,几乎所有已提交的内容都可以恢复,但未提交的内容丢失后可能无法找回。

2.5 远程仓库 -git remote

  1. 远程仓库的基本概念

    1. 远程仓库:位于网络上的仓库,用于团队成员间的协作。

    2. 本地与远程:远程仓库可以位于任何地方,不一定在互联网上,也可以在本地主机上。

  2. 查看远程仓库

    1. 查看远程仓库列表:使用 git remote 命令可以查看配置的远程仓库列表。

    2. 查看详细信息:添加 -v 选项(git remote -v)可以查看每个远程仓库的 URL。

  3. 添加远程仓库

    1. 添加新的远程仓库:使用 git remote add <shortname> <url> 添加新的远程仓库。

    2. 示例:git remote add pb https://github.com/paulboone/ticgit 会添加名为 pb 的远程仓库。

  4. 从远程仓库抓取与拉取

    1. 抓取远程数据:git fetch <remote> 会从远程仓库抓取数据到本地,但不会自动合并。

    2. 拉取远程数据:git pull 会抓取并自动合并远程分支到当前分支。

  5. 推送到远程仓库

    1. 推送数据:git push <remote> <branch> 用于将本地分支的更改推送到远程仓库。

    2. 权限与冲突:推送需要有相应的权限,且如果远程分支有新的提交,则推送可能会被拒绝。

  6. 查看远程仓库详细信息

    1. 详细信息查看:git remote show <remote> 会展示远程仓库的详细信息,包括分支信息和配置

  7. 远程仓库的重命名与移除

    1. 重命名远程仓库:git remote rename <oldname> <newname> 用于修改远程仓库的简写名。

    2. 移除远程仓库:git remote remove <remote>git remote rm <remote> 用于删除一个远程仓库的引用。

2.6 打标签 -git tag

Git 中的标签功能允许你在重要的提交点打上易于记忆的标签,例如版本发布(如 v1.0、v2.0)。以下是 Git 标签的使用和管理的总结:

  1. 列出标签

    #如果只对 1.8.5 系列感兴趣,
    $ git tag -l "v1.8.5*"
    v1.8.5
    v1.8.5-rc0
    v1.8.5-rc1
    v1.8.5-rc2
    v1.8.5-rc3
    v1.8.5.1
    v1.8.5.2
    v1.8.5.3
    v1.8.5.4
    v1.8.5.5    
    1. 查看所有标签:git tag 列出所有标签,按字母顺序排序。

    2. 按模式查找标签:git tag -l "pattern" 查找符合特定模式的标签。

  2. 创建标签

    1. 轻量标签:创建轻量标签(类似于永久的分支),直接指定标签名:git tag <tagname>

    2. 附注标签:创建包含额外信息的附注标签,使用 -a 选项:git tag -a <tagname> -m "message"

  3. 附注标签

    1. 附注标签详细信息:git show <tagname> 显示标签信息和相关的提交信息。

  4. 轻量标签

    1. 轻量标签信息:运行 git show <tagname> 只显示提交信息,没有额外标签信息。

  5. 后期打标签

    1. 给过去的提交打标签:可以给历史提交打标签,如 git tag -a <tagname> <commit>

  6. 共享标签

    1. 推送标签:使用 git push <remote> <tagname> 将标签推送到远程仓库。

    2. 推送所有标签:git push <remote> --tags 一次性推送所有本地标签。

  7. 删除标签

    1. 删除本地标签:git tag -d <tagname> 删除本地的标签。

    2. 删除远程标签:git push <remote> :refs/tags/<tagname>git push <remote> --delete <tagname> 删除远程的标签。

  8. 检出标签

    1. 检出标签内容:git checkout <tagname> 会使仓库进入“分离头指针”状态,在此状态下所作更改不会影响任何分支。

    2. 基于标签创建分支:如果要在标签基础上进行更改,建议创建一个新分支:git checkout -b <newbranch> <tagname>

注意事项

  • 分离头指针状态:在这种状态下进行的提交不属于任何分支,可能难以找到,除非知道确切的提交哈希。

  • 重要提交的标记:标签常用于标记版本发布点,如修复旧版本的错误时。

2.7 设置别名 -git config

这不仅节省了时间,还可以使命令输入更符合个人习惯。以下是有关 Git 别名的一些关键点解释:

设置别名

  • 创建别名:使用 git config --global alias.<alias> <command> 来为 Git 命令设置别名。

  • 例子:

    git config --global alias.co checkout 创建 co 作为 checkout 命令的别名。
    
    git config --global alias.br branch 创建 br 作为 branch 命令的别名。
    
    git config --global alias.ci commit 创建 ci 作为 commit 命令的别名。
    
    git config --global alias.st status 创建 st 作为 status 命令的别名。

使用别名

  • 使用方式:别名可以像常规的 Git 命令一样使用。例如,git co 代替 git checkout

高级别名

  • 自定义命令:可以为复杂的命令创建别名,使其更简洁易用。

  • 取消暂存别名:例如,git config --global alias.unstage 'reset HEAD --' 允许你使用 git unstage fileA 代替 git reset HEAD -- fileA

  • 查看最后一次提交:git config --global alias.last 'log -1 HEAD' 让你可以用 git last 快速查看最近的提交。

外部命令别名

  • 使用 ! 前缀:在别名命令前加上 ! 可以执行 Git 外部的命令。

  • 示例:git config --global alias.visual '!gitk' 创建了一个别名 visual,用于启动 gitk

注意事项

  • 别名的可读性:别名的使用提高了命令行操作的效率,但在与

他人协作或在教学场合时,应考虑到别人可能不熟悉你的个人别名。

  • 全局与本地别名:--global 参数设置的别名在所有 Git 项目中都有效。如果你想要为特定项目设置别名,可以去掉 --global 参数。

3 分支管理

分支的基础

  • 分支简介:Git 分支是独立开发的核心,允许多人同时进行不同的任务而不互相干扰。

  • 分支操作:

    • 创建:使用 git branch <branchName> 创建新分支。

    • 切换:使用 git checkout <branchName> 切换分支。

    • 合并:使用 git merge <branchName> 将一个分支的更改合并到当前分支。

分支的高级使用

  • 冲突解决:在合并分支时可能出现冲突,需要手动解决后再提交。

  • 远程分支:可以将本地分支推送到远程仓库,使用 git push origin <branchName>

  • 分支删除:本地分支使用 git branch -d <branchName> 删除,远程分支使用 git push origin --delete <branchName> 删除。

  • 分支重命名:使用 git branch -m <oldBranchName> <newBranchName>

分支开发工作流

  • 长期分支:如 master 分支,通常用于稳定版本的发布。

  • 短期分支:如功能分支或修复分支,用于开发新功能或修复错误。

  • 工作流原则:

    • master 分支应保持稳定,常用于发布。

    • 短期分支用于开发新特性或修复,完成后合并到 master

    • 尽量使用分支来组织开发工作,保持 master 分支的纯净和稳定。

关键点

  • 分支的有效管理是 Git 使用中的重要方面,可以极大提高开发效率和协作流程的顺畅。

  • 理解分支和合并的机制对于解决合并冲突、保持代码历史清晰是必不可少的。

  • 合理的分支策略有助于保持代码库的清晰和可管理性。

4.1.1 引用 Commit 的记录 --git log

  • Git 使用 40 位的 SHA-1 哈希值来唯一标识每个提交。

  • 通过 git log 命令查看提交历史。

  • 使用 git show [commit-hash] 来查看特定提交的详细信息。

  • Git 能够识别部分 SHA-1 值来唯一标识提交,只要没有歧义。

  • 通过 git log --abbrev-commit 可以查看缩短的提交哈希值。

  • 使用 git log --pretty=oneline 来简化日志输出。

4.1.2 引用分支 -git branch

  • 通过 git branch 查看本地分支,git branch -r 查看远程分支。

  • 使用 git show [branch-name] 来查看特定分支的最后一次提交。

  • 当分支名与目录名重名时,使用 git show [branch-name] -- 来避免歧义。

  • git rev-parse [branch-name] 可以查看分支的当前 SHA-1 值。

4.1.3 引用日志-git reflog

  • Git 保存引用日志(reflog),记录了 HEAD 和分支引用的历史变动。

  • 使用 git reflog 来查看引用日志。

  • 引用日志可用于访问丢失的提交或进行故障恢复。

  • 通过 git show HEAD@{n} 引用特定时间点的提交。

4.2 交互式暂存 -git add

使用 Git 的交互式暂存功能的步骤:

  1. 进入交互式模式: 执行 git add -igit add --interactive,Git 会进入一个交互式会话,让你选择下一步的操作。

    $ git add -i
  2. 你会看到类似以下的输出,列出了暂存区和未暂存的文件:


           staged     unstaged path
 1:      +532/-0      nothing src/trace/events.go
 2:      +365/-0      nothing src/trace/histogram.go
 3:      +325/-0      nothing src/trace/histogram_test.go
 ...
  1. 选择操作: 在提示符 What now> 后,你可以输入对应的命令来执行不同的操作。例如:

    1. status(或输入 1): 查看当前暂存和未暂存的文件。

    2. update(或输入 2): 更新暂存区,选择要暂存的文件。

    3. revert(或输入 3): 取消暂存文件。

    4. patch(或输入 5): 分块暂存文件的特定部分。

  2. 暂存文件或文件的一部分:

    1. 如果选择 update,输入文件列表前的数字来选择要暂存的文件。

    2. 如果选择 patch,Git 会逐块显示每个文件的更改,让你选择是否暂存该更改。

  3. 编辑更改: 在 patch 模式下,Git 会询问你是否要暂存每一个更改块(hunk)。你可以选择以下选项:

    1. y:暂存这个更改块。

    2. n:不暂存这个更改块。

    3. a:暂存这个和后续的所有更改块。

    4. d:不暂存这个和后续的所有更改块。

  4. 退出交互式模式: 完成暂存操作后,可以通过输入 quit(或 7)退出交互式模式。

  5. 提交更改: 一旦你完成了暂存操作,就可以使用 git commit 来提交这些更改。

4.3 贮藏与清理 -git stash

Git 的 stash 功能是一个非常有用的工具,它允许你临时保存你的工作进度,以便你可以干净地切换到另一个分支去做其他工作,然后再回来继续你之前的工作。

使用 Stash 保存工作进度

  • 当你在一个分支上工作但还没准备好提交你的更改时,你可能需要切换到另一个分支去做一些事情。这时,你可以使用 git stash 来保存你当前的工作进度。

  • 运行 git stashgit stash push 会将你的工作目录的更改和暂存区的更改保存起来。

  • 执行这个命令后,你的工作目录和暂存区将会变得干净,就像你还没开始做更改一样。

查看和应用 Stash 的内容

  • 通过 git stash list 可以查看所有保存的 stash 列表。它们会被保存在一个栈结构中,最新的 stash 位于栈顶。

  • 要应用最近的 stash 到你的工作目录,可以使用 git stash apply。如果你有多个 stash,可以指定特定的 stash 应用,如 git stash apply stash@{n},其中 n 是你想要应用的 stash 的索引。

删除 Stash 中的内容

  • 使用 git stash drop 可以删除特定的 stash,例如 git stash drop stash@{0} 会删除索引为 0 的 stash。

  • 另一个选项是 git stash pop,它会应用最新的 stash 并立即从 stash 列表中删除它。这相当于 applydrop 的组合。

Stash 的使用场景

  • Stash 是非常有用的,特别是当你需要快速切换到其他分支去修复一个紧急 bug,但又不想失去你当前分支上的工作进度时。

  • 它也可以用来暂时保存一个不稳定的更改,以便你可以去尝试另一种实现方式,之后再决定使用哪个版本。

注意事项

  • 使用 git stash 时,记得你的更改是临时保存的。在删除或应用某个 stash 后,最好检查一下你的更改是否如预期般应用。

  • Stash 只保存了工作目录和暂存区的更改,不包括未跟踪的文件和忽略的文件,除非你使用了相关的选项(例如 git stash -u 可以包括未跟踪的文件)。

4.3.2 清理工作目录

Git 的 git clean 命令是一个非常强大但也需要谨慎使用的工具。它用于删除工作目录中的未跟踪文件,即那些 Git 未跟踪(不在版本控制下的)的文件。这个命令在你想清理未管理的文件时非常有用,但也有可能会导致重要文件的丢失,因为一旦删除就无法恢复。

使用 git clean 的情况:

  1. 清理未跟踪的文件: 当你的项目中有许多由构建过程、日志文件或其他原因产生的未跟踪文件时,使用 git clean 可以帮助你清理这些文件。

  2. 准备干净的工作环境: 在切换分支或开始新的任务之前,你可能需要一个没有杂乱文件的干净环境。

如何使用 git clean

  1. 查看将要删除的文件(Dry Run):

    在实际删除文件之前,你应该执行 git clean -ngit clean --dry-run。这会列出将要删除的文件,但不实际删除它们。
  2. 强制删除文件:

    使用 git clean -f 命令删除未跟踪的文件。-f 表示强制删除,这是一个安全机制。
  3. 删除目录:

    使用 git clean -d 可以删除未跟踪的目录。
  4. 删除被 .gitignore 忽略的文件:

    如果你也想删除 .gitignore 中指定忽略的文件,可以加上 -x 选项。
  5. 交互式删除:

    通过 -i 选项,Git 会进入交互模式,让你选择具体要删除的文件。

注意事项:

  • 备份重要数据: 在使用 git clean 之前,请确保所有重要的未跟踪文件都已备份。

  • 仔细检查: 使用 -n 选项来仔细检查将要删除的内容,以避免意外删除重要文件。

  • 了解参数: 了解不同参数的作用,如 -f, -d, -x-i,以确保正确使用命令。

4.41 Git Grep

Git 的 grep 命令允许你快速搜索工作目录、提交历史甚至是索引中的字符串或正则表达式。

  • 默认搜索:运行 git grep [搜索词] 会在工作目录中搜索指定的字符串。

  • 显示行号:使用 -n--line-number 选项可以在搜索结果中显示行号。

  • 统计匹配数:-c--count 选项会显示每个文件中匹配到的次数。

  • 显示函数名:-p--show-function 选项会显示每个匹配字符串所在的函数或方法。

4.42 Git Log 日志搜索

git log 也提供了搜索功能,可以帮助你找到特定的提交信息。

  • 内容变更搜索:-S 选项可以显示某个特定内容(如函数、变量等)的添加或删除的提交记录。

  • 行日志搜索:-L 选项允许你对特定函数或代码块的历史进行搜索。它可以显示该代码段在整个历史中的变化。

例如,运行 git log -S [函数名] 可以找到添加或删除指定函数的所有提交。而 git log -L :[函数名]:[文件名] 则会显示某个函数在一个特定文件中的历史变更。

4.45 子模块基础 git submodule add

Git 子模块 是 Git 的一个功能,它允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。这对于包含和管理第三方代码(例如,公共库或其他外部项目)特别有用。

添加子模块

  1. 添加子模块:假设你有一个名为 myproject 的项目,并希望将 model 这个库作为子模块添加进去。你会在 myproject 的目录下执行 git submodule add https://github.com/datawhalechina-git-samples/model。这样,model 就被添加为子模块。

  2. .gitmodules 文件:添加子模块后,Git 会在项目中创建 .gitmodules 文件。这个文件记录了子模块的 URL 和在项目中的路径。

克隆含有子模块的项目

克隆包含子模块的项目时,默认情况下,子模块的内容不会被克隆。你需要执行额外的命令来获取子模块的内容。

  1. 初始化子模块:运行 git submodule init,初始化本地配置文件。

  2. 更新子模块:运行 git submodule update,从子模块的仓库中拉取数据并检出对应的提交。

更新子模块

子模块有更新时,可以通过 git submodule update --remote 来更新。该命令默认更新 main 分支。如果要更新其他分支,需要在 .gitmodules 文件中进行设置。

其他重要操作0

  1. 克隆时包含子模块:使用 git clone --recurse-submodules URL 可以在克隆项目的同时初始化并更新所有子模块。

  2. 子模块分支设置:可以在 .gitmodules 文件中设置子模块的默认分支,以便 git submodule update --remote 更新指定的分支。

Git 的 git bundle 命令是一个强大的工具,它允许你将 Git 仓库的部分或全部数据“打包”成一个文件。这在网络连接不便或需要在不同位置共享仓库的情况下特别有用。下面我将用更简单的语言解释它的基本用法和应用场景。

4.6 打包

想象一下,你正在一个没有网络连接的环境中工作,或者你想把你的项目发送给一个合作伙伴,但又不想把整个仓库上传到互联网。在这种情况下,你可以使用 git bundle 命令创建一个包含 Git 数据的单个文件。

  1. 创建 Bundle 文件:

    1. 运行命令:git bundle create <文件名>.bundle <你想要包含的引用>

    2. 例如:git bundle create repo.bundle HEAD main 将会创建一个包含你当前 HEADmain 分支的 repo.bundle 文件。

  2. 查看 Bundle 文件:

    1. 这个文件就像是你的 Git 仓库的一个快照,你可以通过文件浏览器或命令行工具来查看它。

克隆 Bundle 文件

如果你获得了一个 Git Bundle 文件,可以像克隆一个普通的 Git 仓库一样克隆它。

  1. 克隆 Bundle:

    1. 运行命令:git clone <bundle文件名> <克隆的目录名>

    2. 例如:git clone repo.bundle repo 将会从 repo.bundle 文件中克隆出一个新的 repo 目录。

使用 Bundle 进行更新

如果你只想发送仓库的一部分更新,而不是整个仓库,你可以通过指定特定的提交来创建一个 Bundle。

  1. 确定要包含的提交:

    1. 使用 git log 命令来查找你想要包含的提交。

    2. 例如:git log --oneline origin/main..main

  2. 创建包含特定提交的 Bundle:

    1. 使用 git bundle create <文件名>.bundle <要包含的提交>

    2. 例如:git bundle create commits.bundle main ^5de18d5

  3. 导入 Bundle:

    1. 如果你收到了一个包含特定提交的 Bundle 文件,可以使用 git bundle verify 命令来验证它,然后使用 git pullgit fetch 将更新导入你的仓库。

总结

Git 的 Bundle 功能非常适合在不方便使用网络的环境中共享 Git 仓库,或者在你只想发送仓库的部分更新时。它创建了一个包含 Git 数据的文件,可以很容易地在不同的环境中传输和使用。文章来源地址https://www.toymoban.com/news/detail-826382.html

到了这里,关于Datawhale 学习git-第二节的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux学习第二十二节-网卡IP设置

    1. 修改网卡IP地址 方式一:通过修改 网卡配置文件 修改 网卡配置文件位置: /etc/sysconfig/network-scripts/网卡名 #ifconfig   表示用于显示和设置网卡的参数 #ip addr   表示用于显示和设置网卡的参数   #systemctl restart network 表示重启网络 #ifup 网卡名 表示启动该网卡设备 #ifdown 网卡

    2024年02月17日
    浏览(62)
  • Datawhale学习git-第一节

    ✨ 思考是行动的种子。—— 爱默生 三层笔记法实践步骤:构思笔记 → 封存笔记 → 行动笔记 鼠标放置在正文左侧,点击 “ + ” 工具栏中的“ 高亮块 ”,高亮你的学习感悟 【输出】将构思笔记层中提炼出的需要执行的内容或最为核心的内容上移至行动笔记层,每次打开笔

    2024年01月20日
    浏览(40)
  • 【Python零基础学习入门篇②】——第二节:Python的常用语句

    ⬇️⬇️⬇️⬇️⬇️⬇️ ⭐⭐⭐Hello,大家好呀我是陈童学哦,一个普通大一在校生,请大家多多关照呀嘿嘿😁😊😘 🌟🌟🌟 技术这条路固然很艰辛,但既已选择,该当坚毅地走下去,加油! 🌤️PUA: ” 你所看到的惊艳都曾平庸历练 **“**🚀🚀🚀 🍉🍉🍉 最后让我

    2024年02月04日
    浏览(39)
  • Verilog 学习第二节(设计一个以1s频率闪烁的LED灯)

    思考步骤:fpga开发板上默认的时钟频率是50MHz,就是20ns闪烁一次,若要完成500ms闪烁一次的话就需要进行计数,500ms/20ns=25000000次,需要设置一个计数变量cnt进行记录,其位数应该等于 25 位,然后需要注意的是从0开始计数 到25000000-1次 的时候就可以了,不要记到整,因为它还

    2024年02月12日
    浏览(40)
  • 第二章(第二节):无穷小量和函数

    若 lim f(x) = 0 , 则称函数 f(x) 当 x → x 0 时是无穷小量,简称: 无穷小 。      x→ x 0 定理1. 有限多个 无穷小量的代数和仍是无穷小量 定理2. 有限多个 无穷小量的积也是无穷小量 定理3.常数与无穷小量的积也是无穷小量 定理4.有界变量与无穷小量的积是无穷小量 当 x→

    2024年02月08日
    浏览(53)
  • 第二节 LwIP简介

    本专栏使用的是LwIP 2.1.2版本 ,官方下载链接:http://savannah.nongnu.org/projects/lwip/。 本专栏以LwIP 2. 1.2 为主要对象进行讲解,后续中出现的LwIP 如果没有特殊声明,均指2.1.2 版本。此时的LwIP 2. 1.2 为最新版本,可能当这本书写完的时候,LwIP 又被更新了,对于学习而言,大家其实

    2024年02月03日
    浏览(42)
  • 计算机网络 第二节

    目录 一,计算机网络的分类 1.按照覆盖范围分 2.按照所属用途分 二,计算机网络逻辑组成部分 1.核心部分 (通信子网) 1.1电路交换 1.2 分组交换 两种方式的特点     重点 2.边缘部分  (资源子网) 进程通信的方式: 三,计算机网路性能指标 1.速度指标 2.时间指标 3.往返

    2024年02月10日
    浏览(37)
  • 第二节 LVGL移植

    确定输入、输出设备 输入:触摸屏、鼠标、键盘以及编码器;输出:显示屏 准备LVGL库、例程 准备V8.2版本的LVGL库文件,还有支持所需功能的例程源码 添加LVGL库到工程 按需裁剪、修改LVGL库文件,并添加到MDK工程中 配置输入、输出设备 适配自己的输入和输出设备,添加所需

    2024年02月06日
    浏览(34)
  • 华为HCIP第二节-------------------------ISIS

    IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织)为它的CLNP(ConnectionLessNetwork Protocol,无连接网络协议)设计的一种动态路由协议。 is-is是一个链路状态协议。 NET相当于ospf中routeid+区域ID NET(Networ

    2024年02月15日
    浏览(87)
  • 数据结构(初阶)第二节:顺序表

    数据结构(初阶)第一节:数据结构概论-CSDN博客 从本文正式进入对数据结构的讲解,开始前友友们要有C语言的基础,熟练掌握 动态内存管理 、 结构体 、 指针 等章节,方便后续的学习。 顺序表(Sequence List) 顺序表的分类 静态顺序表 动态顺序表 顺序表的功能 初始化 扩

    2024年04月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包