【Git】【commit】查看未推送的提交查看指定commit的修改内容合并不连续的commit
文章目录
- 1. 查看未推送的提交
- 方法一 :git status
- 方法二:git log
- 方法三:git cherry
- 方法四:git rev-list
- 2. 查看指定commit的修改
- 方法一:git show
- 方法二:git log
- 方法三:git diff
- 3. 合并不连续的提交
- step1 : 启动交互式变基
- step2 : 调整提交顺序
- step3 : 合并提交
- step4 : 解决冲突并提交
- 示例
1. 查看未推送的提交
方法一 :git status
若回显内容如下,则表示本地有未推送的提交:1 commit表示没有推送的提交数量
Your branch is ahead of 'origin/main' by 1 commit.(use "git push" to publish your local commits)
方法二:git log
查看本地是否有未推送的提交:
git log origin/main..HEAD
# origin/main为远程分支名称
若回显内容为空,则表示本地所有的提交均已推送;若回显有内容,则为未推送的提交
方法三:git cherry
如下命令可列出未推送的提交:
git cherry -v origin/main
# -v : 显示提交的详细信息
回显结果中的提交即为未推送的提交
方法四:git rev-list
git rev-list
可以统计为推送的提交数量:
git rev-list --count origin/main..HEAD
回显的数字即表示未推送的提交数量。
2. 查看指定commit的修改
方法一:git show
显示指定commit的日期、作者、提交信息以及文件更改的差异:
git show <commitid>
# 选项
git show --stat <commitid> : 仅显示修改的文件和行数统计
git show <commitid>:<path-to-file> : 查看特定文件的变更
方法二:git log
在提交历史中显示该commit的详细信息以及差异:
git log -p -1 <commitid>
-p : patch,表示显示差异
-1 : 表示仅显示一个提交
方法三:git diff
比较当前commit与其父commit的差异:
git diff <commitid>^ <commitid>
3. 合并不连续的提交
可以使用交互式变基调整提交顺序并合并:
step1 : 启动交互式变基
git rebase -i HEAD~N # N要足够大,能包含目标提交
git rebase -i <commitid>^ # 或者指定更早的提交点
step2 : 调整提交顺序
编辑器中显示的提交内容假设如下:
pick a1b2c3d Commit 1
pick e4f5g6h Commit 2
pick i7j8k9l Commit 3
将要合并的提交移动到相邻位置:
pick a1b2c3d Commit 1
pick i7j8k9l Commit 3 # 移动
pick e4f5g6h Commit 2
step3 : 合并提交
将排在第二位的提交的命令从pick改为squash(保留提交信息)或fixup(丢弃提交信息)
pick a1b2c3d Commit 1
squash i7j8k9l Commit 3 # 合并到前一个提交
pick e4f5g6h Commit 2
step4 : 解决冲突并提交
保存并退出编辑器,git启动合并,若此时出现冲突则解决冲突后执行:
git add .
git rebase --continue
最后,如果使用squash则编辑最终的提交信息。
示例
# 假设要合并 a12345(新)和 b12345(旧)
git rebase -i a12345^ # 从目标提交之前开始
# 在编辑器中将 b12345 移动到 a12345 的下一行并改为squash
# 解决冲突