git 第二次提交_git(五 合并提交命令)

本文详细介绍了如何使用gitrebase-i命令合并多次提交,并修改commitmessage,以便保持提交记录的整洁。通过步骤演示了从gitreflog查看记录、选择合并的commit、编辑commitmessage直至最后的gitlog检查,确保合并操作正确无误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:本地做了四次提交,想把第 2、3、4 次提交合并,只保留第二次提交的commit message

编辑器上的git记录.png

解决方案:

1、git reflog 查看所有的提交记录

p.s. git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作);git log 命令可以显示所有提交过的版本信息,看不到删除的记录。所以买后悔药回退删除记录的时候,可以用 git reflog

命令行查看提交记录.png

上面的图片展示了,一共四次提交,按照时间倒序排列分别是 第 4、3、2、1次提交

2、git rebase -i “最新的一个想保留的 Commit”

意思是,我想合并2、3、4,那么最新一个想保留的 commit 就是 第一次 commit,他的hash值为 ae9c811,输入下列命令并回车

git rebase -i ae9c811

或者

# 即将可以编辑的信息不包括起点,包括终点,起点比终点距离现在时间久远

git rebase -i [startpoint] [endpoint]

rebase指定位置

3、选择要合并的 commit :上述步骤完成后会跳出下图界面

注意这个时候的顺序:最近一次提交在最下面

选择合并的commit及其指令.png

前面三行是我们需要操作的三个 Commit,每行最前面的是对该 Commit 操作的 Command。关于每个 Command 具体做什么,下面的注释写得非常清楚。为了完成我们的需求,我们可以关注到这两个命令:

# 使用该 Commit,但会被合并到前一个 Commit 当中

s, squash = use commit, but meld into previous commit

# 就像 squash 那样,但会抛弃这个 Commit 的 Commit message

f, fixup = like "squash", but discard this commit's log message

我们可以选择把第 3、4 次的commit message合并到第二次上面,修改command如下,并保存退出:

修改command.png

4、编辑合并 commit 的 commit message

上述步骤完成后,会跳出如下界面

编辑commitMessage.png

通过下面的注释,我们可以知道,这里其实就是一个编写 Commit Message 的界面,带 # 的行会被忽略掉,其余的行就会作为我们的新 Commit Message,于是,我们编辑一下,保存退出

编辑完成.png

5、检查:使用git log检查

git log

结果如下:

log结果.png

注意,使用git reflog仍可以查看最初的命令:

reflog结果.png

两者的区别在于,git log只显示保留的,git reflog可以显示 reset 和 rebase、删除的版本

编译器的可视化git工具中的展示:

image.png

这个时候再push,提交记录上就非常好看了

请注意:

### 关于Git团队开发中的第二次提交及相关操作 在Git团队协作中,第二次提交通常涉及对已有更改的进一步完善或修复。以下是关于如何高效完成这一过程的最佳实践以及具体的操作方法。 #### 1. 更新本地分支至最新状态 为了确保第二次提交基于最新的代码库,在执行任何新改动之前,应先同步远程仓库的状态到本地分支: ```bash git fetch origin git rebase origin/main # 假设 main 是主分支名称 ``` 通过 `fetch` 获取远程更新而不立即合并,再利用 `rebase` 将本地变更应用到最新版本之上[^4]。 #### 2. 修改与测试新增功能/修正错误 继续实现未完成的功能或者解决第一次评审反馈指出的问题,并进行全面测试验证其正确性和稳定性。 #### 3. 阶段化添加修改内容 只针对本次改进部分做增量式的阶段加入暂存区而非全部重新纳入: ```bash git add -p # 交互式分块选择要提交的部分 ``` 这种方式有助于精确控制哪些变化被记录下来用于此次提交[^2]。 #### 4. 编写清晰有意义的Commit Message 遵循既定格式撰写描述性的提交信息以便后续追踪理解每次变动原因及其影响范围: - **首行**: 简短概括(不超过70字符),采用祈使句形式表达动作。 - **空一行**. - **主体段落**(可选): 更详细的解释背景动机等补充细节;每行长度建议保持在约72字以内便于阅读. 例如: ```text fix: address NPE issue when user profile is null Ensure proper handling of uninitialized profiles by adding default values initialization logic before accessing properties. ``` 上述例子展示了如何按照标准构建一个有效的commit message结构. #### 5. 执行实际提交行为 一旦准备就绪可以正式提交这些调整: ```bash git commit --amend # 如果希望合并最后一次提交的历史成为单一条目时使用此命令代替常规单独创建新的提交对象 # 或者正常方式如下所示 git commit -m "<type>: <subject>" ``` 注意如果选择了前者(--amend选项),那么它会把当前工作树里的改变追加到最后那个尚未推送出去的提交里去形成一个新的修订版号,因此适用于那些还未分享给其他人的个人草稿性质的小修小补场景下比较合适;而后者则是完全独立的新一轮提交流程[^1]. 最后一步就是再次推送到远端服务器让所有人可见我们的劳动成果啦! ```bash git push origin HEAD:refs/for/<branch_name> # 对于 Gerrit 类型审核机制下的项目可能需要这样指定目标分支名来发起Code Review请求 # 普通情况则简单些即可满足需求 git push origin <your_branch> ``` 以上便是围绕着"Git团队协作 第二次提交"所展开的一系列推荐做法概述[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值