Diff and Patch
Diff and Patch
Git diff
通过 git diff 打 Patch
git diff 生成的补丁是展示当前工作目录中的修改(或者两个不同的提交之间的修改),而 git format-patch 通常用来生成提交历史的补丁。
1. 生成当前未提交的更改的补丁
# 这个命令会生成一个名为 changes.patch 的文件,文件中包含了当前工作目录中的所有未提交的更改(与最新提交的差异)。
git diff > changes.patch
2. 生成两个提交之间的补丁
# 这个命令会生成两个提交之间的差异补丁文件。commit1:旧版本,commmit2:新版本
git diff <commit1> <commit2> > changes.patch
3. 生成特定文件的补丁
git diff <commit1> <commit2> path/to/file > file-changes.patch
4. 打 Patch
git apply --stat 0001-limit-log-function.patch # 查看patch的情况
git apply --check 0001-limit-log-function.patch # 检查patch是否能够打上,如果没有任何输出,则说明无冲突,可以打上
Git diff:索引区【暂存区】(--) VS 工作区(++)
Git diff --cached:索引区 VS 代码仓库【注意:git add. 将修改添加到索引区里面去】
git cat-file -p 是一个 Git 命令,用于查看 Git 对象的内容。Git 对象可以是提交(commit)、树(tree)、标签(tag)、或 blob(文件)。这个命令非常有用,特别是在需要检查 Git 仓库中的具体对象内容时。
# <object> 可以是对象的哈希值、分支名、标签名、或其他可以解析为对象的引用。
# -p:表示“pretty-print”,用于以人类可读的格式输出对象内容。
git cat-file -p <object>
Demo:
查看某次提交的详细信息:
# 这个命令将会输出该提交的父提交、作者、提交时间、提交消息等详细信息。
git cat-file -p <commit_hash>
查看某个树对象的内容:
# 将会输出该树对象中的文件和目录结构。
git cat-file -p <tree_hash>
查看一个文件对象(blob)的内容:
# 将会输出该文件的内容。
git cat-file -p <blob_hash>
查看某个标签对象的内容:
# 将会输出该标签的具体信息,比如标签作者、标签创建时间等。
git cat-file -p <tag_name>
--:索引区
++:工作区
git patch & apply
# 对最近一次提交打 patch
git format-patch -1
# 切换到其它分支,然后打 patch,这样并没有提交,要进行 commit
git branch dev
git checkout dev
git apply patch 文件
# git am 不仅会应用补丁,还会基于补丁文件中的提交信息创建一个新的提交。这在应用来自其他开发者的补丁时非常有用。
git am <patch-file>