【Git】【commit】查看未推送的提交&查看指定commit的修改内容&合并不连续的commit

文章目录

  • [1. 查看未推送的提交](#1. 查看未推送的提交)
    • [方法一 :git status](#方法一 :git status)
    • [方法二:git log](#方法二:git log)
    • [方法三:git cherry](#方法三:git cherry)
    • [方法四:git rev-list](#方法四:git rev-list)
  • [2. 查看指定commit的修改](#2. 查看指定commit的修改)
    • [方法一:git show](#方法一:git show)
    • [方法二:git log](#方法二:git log)
    • [方法三:git diff](#方法三:git diff)
  • [3. 合并不连续的提交](#3. 合并不连续的提交)
    • [step1 : 启动交互式变基](#step1 : 启动交互式变基)
    • [step2 : 调整提交顺序](#step2 : 调整提交顺序)
    • [step3 : 合并提交](#step3 : 合并提交)
    • [step4 : 解决冲突并提交](#step4 : 解决冲突并提交)
    • 示例

1. 查看未推送的提交

方法一 :git status

若回显内容如下,则表示本地有未推送的提交:1 commit表示没有推送的提交数量

bash 复制代码
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

方法二:git log

查看本地是否有未推送的提交:

bash 复制代码
git log origin/main..HEAD
# origin/main为远程分支名称

若回显内容为空,则表示本地所有的提交均已推送;若回显有内容,则为未推送的提交

方法三:git cherry

如下命令可列出未推送的提交:

bash 复制代码
git cherry -v origin/main
# -v : 显示提交的详细信息

回显结果中的提交即为未推送的提交

方法四:git rev-list

git rev-list可以统计为推送的提交数量:

bash 复制代码
git rev-list --count origin/main..HEAD

回显的数字即表示未推送的提交数量。

2. 查看指定commit的修改

方法一:git show

显示指定commit的日期、作者、提交信息以及文件更改的差异:

bash 复制代码
git show <commitid>
# 选项
git show --stat <commitid> : 仅显示修改的文件和行数统计
git show <commitid>:<path-to-file> : 查看特定文件的变更

方法二:git log

在提交历史中显示该commit的详细信息以及差异:

bash 复制代码
git log -p -1 <commitid>
-p : patch,表示显示差异
-1 : 表示仅显示一个提交

方法三:git diff

比较当前commit与其父commit的差异:

bash 复制代码
git diff <commitid>^ <commitid>

3. 合并不连续的提交

可以使用交互式变基调整提交顺序并合并:

step1 : 启动交互式变基

bash 复制代码
git rebase -i HEAD~N # N要足够大,能包含目标提交
git rebase -i <commitid>^ # 或者指定更早的提交点

step2 : 调整提交顺序

编辑器中显示的提交内容假设如下:

bash 复制代码
pick a1b2c3d Commit 1
pick e4f5g6h Commit 2
pick i7j8k9l Commit 3

将要合并的提交移动到相邻位置:

bash 复制代码
pick a1b2c3d Commit 1
pick i7j8k9l Commit 3  # 移动
pick e4f5g6h Commit 2 

step3 : 合并提交

将排在第二位的提交的命令从pick改为squash(保留提交信息)或fixup(丢弃提交信息)

bash 复制代码
pick a1b2c3d Commit 1
squash i7j8k9l Commit 3  # 合并到前一个提交
pick e4f5g6h Commit 2

step4 : 解决冲突并提交

保存并退出编辑器,git启动合并,若此时出现冲突则解决冲突后执行:

bash 复制代码
git add .
git rebase --continue

最后,如果使用squash则编辑最终的提交信息。

示例

bash 复制代码
# 假设要合并 a12345(新)和 b12345(旧)
git rebase -i a12345^ # 从目标提交之前开始
# 在编辑器中将 b12345 移动到 a12345 的下一行并改为squash
# 解决冲突
相关推荐
happyness445 小时前
Git:AI编程时代的“安全带“与“时光机“
git·ai编程
To_OC6 小时前
踩坑无数!终于捋顺Git基础核心工作流(新手必看)
git·程序员
xuhaoyu_cpp_java10 小时前
Git学习(三)
经验分享·笔记·git·学习
C137的本贾尼11 小时前
Git基本操作(二):add与commit,把文件交给Git管理
git
咸鱼永不翻身12 小时前
Git Hooks—提交Commit前检查本地时间是否不对
git·git-hooks·git钩子
John_ToDebug12 小时前
如何针对指定目录生成 Git Patch 并精准应用到其他分支
chrome·git
Joy T13 小时前
【Web3】Hardhat工程架构中Solidity与TypeChain的协作机制
git·架构·typescript·web3·智能合约·hardhat·typechain
步十人13 小时前
【Git】基础概念与在vscode中的简单使用
git
代码中介商13 小时前
Git 版本控制完全指南:从分支管理到远程协作
linux·git
无风听海21 小时前
git fsck 深度解析 Git 仓库的体检医生
git