2.3 查看提交历史 -git log
简单查看提交历史
-
使用
git log
不带任何参数,会按时间先后顺序列出所有提交,最新的排在最上面。 -
默认显示的信息包括提交的哈希值、作者信息、日期和提交信息。
查看详细的提交差异
-
使用
git log -p
或git 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
有几个内建选项,如oneline
、short
、full
等。
图形化展示历史
-
使用
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
来修改最后一次提交。这不会创建一个新的提交,而是替换上一次的提交。 -
操作效果:如果没有新的更改,它仅修改提交信息。如果有新的更改被暂存,它会将这些更改包含在新的提交中。
-
取消暂存文件
-
使用
git reset HEAD <file>
:如果错误地暂存了文件,可以使用此命令取消暂存。 -
操作安全性:这个命令相对安全,因为它不会影响工作目录中的文件内容。
-
-
撤消文件修改
-
使用
git checkout -- <file>
:如果你想撤消对文件的修改并恢复到上次提交的状态,可以使用此命令。 -
操作风险:这是一个危险的操作,因为它会永久删除工作目录中的所有更改。只有当你确信不再需要这些本地更改时,才应使用此命令。
-
注意事项
-
撤消提交的不可逆性:需要注意的是,某些撤消操作(如
git commit --amend
和git checkout -- <file>
)是不可逆的。这意味着,一旦执行这些操作,之前的工作可能会丢失。 -
数据恢复:在 Git 中,几乎所有已提交的内容都可以恢复,但未提交的内容丢失后可能无法找回。
2.5 远程仓库 -git remote
-
远程仓库的基本概念
-
远程仓库:位于网络上的仓库,用于团队成员间的协作。
-
本地与远程:远程仓库可以位于任何地方,不一定在互联网上,也可以在本地主机上。
-
-
查看远程仓库
-
查看远程仓库列表:使用
git remote
命令可以查看配置的远程仓库列表。 -
查看详细信息:添加
-v
选项(git remote -v
)可以查看每个远程仓库的 URL。
-
-
添加远程仓库
-
添加新的远程仓库:使用
git remote add <shortname> <url>
添加新的远程仓库。 -
示例:
git remote add pb
https://github.com/paulboone/ticgit
会添加名为pb
的远程仓库。
-
-
从远程仓库抓取与拉取
-
抓取远程数据:
git fetch <remote>
会从远程仓库抓取数据到本地,但不会自动合并。 -
拉取远程数据:
git pull
会抓取并自动合并远程分支到当前分支。
-
-
推送到远程仓库
-
推送数据:
git push <remote> <branch>
用于将本地分支的更改推送到远程仓库。 -
权限与冲突:推送需要有相应的权限,且如果远程分支有新的提交,则推送可能会被拒绝。
-
-
查看远程仓库详细信息
-
详细信息查看:
git remote show <remote>
会展示远程仓库的详细信息,包括分支信息和配置
-
-
远程仓库的重命名与移除
-
重命名远程仓库:
git remote rename <oldname> <newname>
用于修改远程仓库的简写名。 -
移除远程仓库:
git remote remove <remote>
或git remote rm <remote>
用于删除一个远程仓库的引用。
-
2.6 打标签 -git tag
Git 中的标签功能允许你在重要的提交点打上易于记忆的标签,例如版本发布(如 v1.0、v2.0)。以下是 Git 标签的使用和管理的总结:
-
列出标签
#如果只对 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
-
查看所有标签:
git tag
列出所有标签,按字母顺序排序。 -
按模式查找标签:
git tag -l "pattern"
查找符合特定模式的标签。
-
-
创建标签
-
轻量标签:创建轻量标签(类似于永久的分支),直接指定标签名:
git tag <tagname>
。 -
附注标签:创建包含额外信息的附注标签,使用
-a
选项:git tag -a <tagname> -m "message"
。
-
-
附注标签
-
附注标签详细信息:
git show <tagname>
显示标签信息和相关的提交信息。
-
-
轻量标签
-
轻量标签信息:运行
git show <tagname>
只显示提交信息,没有额外标签信息。
-
-
后期打标签
-
给过去的提交打标签:可以给历史提交打标签,如
git tag -a <tagname> <commit>
。
-
-
共享标签
-
推送标签:使用
git push <remote> <tagname>
将标签推送到远程仓库。 -
推送所有标签:
git push <remote> --tags
一次性推送所有本地标签。
-
-
删除标签
-
删除本地标签:
git tag -d <tagname>
删除本地的标签。 -
删除远程标签:
git push <remote> :refs/tags/<tagname>
或git push <remote> --delete <tagname>
删除远程的标签。
-
-
检出标签
-
检出标签内容:
git checkout <tagname>
会使仓库进入“分离头指针”状态,在此状态下所作更改不会影响任何分支。 -
基于标签创建分支:如果要在标签基础上进行更改,建议创建一个新分支:
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 的交互式暂存功能的步骤:
-
进入交互式模式: 执行
git add -i
或git add --interactive
,Git 会进入一个交互式会话,让你选择下一步的操作。$ git add -i
-
你会看到类似以下的输出,列出了暂存区和未暂存的文件:
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
...
-
选择操作: 在提示符
What now>
后,你可以输入对应的命令来执行不同的操作。例如:-
status
(或输入1
): 查看当前暂存和未暂存的文件。 -
update
(或输入2
): 更新暂存区,选择要暂存的文件。 -
revert
(或输入3
): 取消暂存文件。 -
patch
(或输入5
): 分块暂存文件的特定部分。
-
-
暂存文件或文件的一部分:
-
如果选择
update
,输入文件列表前的数字来选择要暂存的文件。 -
如果选择
patch
,Git 会逐块显示每个文件的更改,让你选择是否暂存该更改。
-
-
编辑更改: 在
patch
模式下,Git 会询问你是否要暂存每一个更改块(hunk)。你可以选择以下选项:-
y
:暂存这个更改块。 -
n
:不暂存这个更改块。 -
a
:暂存这个和后续的所有更改块。 -
d
:不暂存这个和后续的所有更改块。
-
-
退出交互式模式: 完成暂存操作后,可以通过输入
quit
(或7
)退出交互式模式。 -
提交更改: 一旦你完成了暂存操作,就可以使用
git commit
来提交这些更改。
4.3 贮藏与清理 -git stash
Git 的 stash 功能是一个非常有用的工具,它允许你临时保存你的工作进度,以便你可以干净地切换到另一个分支去做其他工作,然后再回来继续你之前的工作。
使用 Stash 保存工作进度
-
当你在一个分支上工作但还没准备好提交你的更改时,你可能需要切换到另一个分支去做一些事情。这时,你可以使用
git stash
来保存你当前的工作进度。 -
运行
git stash
或git 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 列表中删除它。这相当于apply
和drop
的组合。
Stash 的使用场景
-
Stash 是非常有用的,特别是当你需要快速切换到其他分支去修复一个紧急 bug,但又不想失去你当前分支上的工作进度时。
-
它也可以用来暂时保存一个不稳定的更改,以便你可以去尝试另一种实现方式,之后再决定使用哪个版本。
注意事项
-
使用
git stash
时,记得你的更改是临时保存的。在删除或应用某个 stash 后,最好检查一下你的更改是否如预期般应用。 -
Stash 只保存了工作目录和暂存区的更改,不包括未跟踪的文件和忽略的文件,除非你使用了相关的选项(例如
git stash -u
可以包括未跟踪的文件)。
4.3.2 清理工作目录
Git 的 git clean
命令是一个非常强大但也需要谨慎使用的工具。它用于删除工作目录中的未跟踪文件,即那些 Git 未跟踪(不在版本控制下的)的文件。这个命令在你想清理未管理的文件时非常有用,但也有可能会导致重要文件的丢失,因为一旦删除就无法恢复。
使用 git clean
的情况:
-
清理未跟踪的文件: 当你的项目中有许多由构建过程、日志文件或其他原因产生的未跟踪文件时,使用
git clean
可以帮助你清理这些文件。 -
准备干净的工作环境: 在切换分支或开始新的任务之前,你可能需要一个没有杂乱文件的干净环境。
如何使用 git clean
:
-
查看将要删除的文件(Dry Run):
在实际删除文件之前,你应该执行git clean -n
或git clean --dry-run
。这会列出将要删除的文件,但不实际删除它们。 -
强制删除文件:
使用git clean -f
命令删除未跟踪的文件。-f
表示强制删除,这是一个安全机制。 -
删除目录:
使用git clean -d
可以删除未跟踪的目录。 -
删除被
如果你也想删除.gitignore
忽略的文件:.gitignore
中指定忽略的文件,可以加上-x
选项。 -
交互式删除:
通过-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 仓库的子目录。这对于包含和管理第三方代码(例如,公共库或其他外部项目)特别有用。
添加子模块
-
添加子模块:假设你有一个名为
myproject
的项目,并希望将model
这个库作为子模块添加进去。你会在myproject
的目录下执行git submodule add
https://github.com/datawhalechina-git-samples/model
。这样,model
就被添加为子模块。 -
.gitmodules 文件:添加子模块后,Git 会在项目中创建
.gitmodules
文件。这个文件记录了子模块的 URL 和在项目中的路径。
克隆含有子模块的项目
克隆包含子模块的项目时,默认情况下,子模块的内容不会被克隆。你需要执行额外的命令来获取子模块的内容。
-
初始化子模块:运行
git submodule init
,初始化本地配置文件。 -
更新子模块:运行
git submodule update
,从子模块的仓库中拉取数据并检出对应的提交。
更新子模块
子模块有更新时,可以通过 git submodule update --remote
来更新。该命令默认更新 main
分支。如果要更新其他分支,需要在 .gitmodules
文件中进行设置。
其他重要操作0
-
克隆时包含子模块:使用
git clone --recurse-submodules URL
可以在克隆项目的同时初始化并更新所有子模块。 -
子模块分支设置:可以在
.gitmodules
文件中设置子模块的默认分支,以便git submodule update --remote
更新指定的分支。
Git 的 git bundle
命令是一个强大的工具,它允许你将 Git 仓库的部分或全部数据“打包”成一个文件。这在网络连接不便或需要在不同位置共享仓库的情况下特别有用。下面我将用更简单的语言解释它的基本用法和应用场景。
4.6 打包
想象一下,你正在一个没有网络连接的环境中工作,或者你想把你的项目发送给一个合作伙伴,但又不想把整个仓库上传到互联网。在这种情况下,你可以使用 git bundle
命令创建一个包含 Git 数据的单个文件。
-
创建 Bundle 文件:
-
运行命令:
git bundle create <文件名>.bundle <你想要包含的引用>
。 -
例如:
git bundle create repo.bundle HEAD main
将会创建一个包含你当前HEAD
和main
分支的repo.bundle
文件。
-
-
查看 Bundle 文件:
-
这个文件就像是你的 Git 仓库的一个快照,你可以通过文件浏览器或命令行工具来查看它。
-
克隆 Bundle 文件
如果你获得了一个 Git Bundle 文件,可以像克隆一个普通的 Git 仓库一样克隆它。
-
克隆 Bundle:
-
运行命令:
git clone <bundle文件名> <克隆的目录名>
。 -
例如:
git clone repo.bundle repo
将会从repo.bundle
文件中克隆出一个新的repo
目录。
-
使用 Bundle 进行更新
如果你只想发送仓库的一部分更新,而不是整个仓库,你可以通过指定特定的提交来创建一个 Bundle。
-
确定要包含的提交:
-
使用
git log
命令来查找你想要包含的提交。 -
例如:
git log --oneline origin/main..main
。
-
-
创建包含特定提交的 Bundle:
-
使用
git bundle create <文件名>.bundle <要包含的提交>
。 -
例如:
git bundle create commits.bundle main ^5de18d5
。
-
-
导入 Bundle:
-
如果你收到了一个包含特定提交的 Bundle 文件,可以使用
git bundle verify
命令来验证它,然后使用git pull
或git fetch
将更新导入你的仓库。
-
总结文章来源:https://www.toymoban.com/news/detail-826382.html
Git 的 Bundle 功能非常适合在不方便使用网络的环境中共享 Git 仓库,或者在你只想发送仓库的部分更新时。它创建了一个包含 Git 数据的文件,可以很容易地在不同的环境中传输和使用。文章来源地址https://www.toymoban.com/news/detail-826382.html
到了这里,关于Datawhale 学习git-第二节的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!