如何使用git diff
比较工作树与贮藏内容
技术背景
在使用Git进行版本控制时,有时我们会将当前的修改暂存到贮藏(stash)中,之后可能需要查看工作树与贮藏内容之间的差异。了解如何使用git diff
命令来进行这样的比较,可以帮助我们更好地管理代码修改。
实现步骤
查看最近的贮藏内容
可以使用以下命令查看最近的贮藏内容的详细差异:
查看任意贮藏内容
若要查看指定的贮藏内容,可使用以下命令,例如查看第二近的贮藏内容:
1
| git stash show -p stash@{1}
|
比较贮藏与分支
1
| git diff stash@{0} master
|
1
| git diff --name-only stash@{0} master
|
比较贮藏与它所基于的提交
当贮藏所基于的分支在贮藏之后有了更改时,可使用以下命令:
比较不同对象与贮藏的差异
比较对象 | git diff 命令 | git stash show 命令 |
---|
本地工作树 | git diff stash@{0} | git stash show -l |
父提交 | git diff stash@{0}^ stash@{0} | git stash show -p |
HEAD 提交 | git diff stash@{0} HEAD | / |
比较脏工作树与贮藏
当工作树处于脏状态(有未提交的修改)时,可按以下步骤操作:
- 提交脏工作树的修改:
1 2
| git add . git commit -m "Dirty commit"
|
- 比较贮藏与提交:
- 撤销提交并恢复工作树:
1 2
| git reset --soft HEAD~1 git reset .
|
临时贮藏工作副本进行比较
另一种比较脏工作树与贮藏的方法:
1 2 3
| git stash save "temp" git diff stash@{0} stash@{1} git stash pop
|
反转差异显示
若git diff stash
显示的差异方向不符合预期,可使用以下命令反转:
使用比较工具
若有像Beyond Compare这样的差异比较工具,可使用以下命令:
更直观的比较方法
使用双点语法比较本地工作树与最近的贮藏:
1
| git diff <current-branchname>..stash@{0}
|
查看贮藏列表并比较
查看贮藏列表:
获取贮藏编号后进行比较:
可视化差异比较
先查看贮藏修改的文件:
1
| git stash show stash@{0}
|
然后使用差异工具进行可视化比较:
1
| git difftool --dir-diff stash@{0} stash@{0}^
|
核心代码
以下是一些常用的核心代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| git stash show -p
git stash show -p stash@{1}
git diff stash@{0} master
git diff stash@{0}^!
git add . git commit -m "Dirty commit" git diff HEAD stash@{0} git reset --soft HEAD~1 git reset .
git stash save "temp" git diff stash@{0} stash@{1} git stash pop
git diff stash -R
git difftool stash HEAD
git diff <current-branchname>..stash@{0}
git stash show stash@{0} git difftool --dir-diff stash@{0} stash@{0}^
|
最佳实践
- 对于简单的查看贮藏内容,优先使用
git stash show -p
。 - 当需要比较贮藏与分支时,使用
git diff
命令。 - 若工作树处于脏状态,可选择临时贮藏工作副本的方法进行比较,避免不必要的提交。
- 若需要可视化的差异比较,配置好差异工具并使用
git difftool
命令。
常见问题
git diff stash@{0}
可能产生误导性结果:如果贮藏和当前分支的历史记录已经分叉,差异显示可能会让人误以为是在添加贮藏中的新内容并移除当前分支的独特内容。此时可使用git diff <current-branchname>..stash@{0}
进行更直观的比较。- 差异显示方向不符合预期:使用
git diff stash -R
反转差异显示。