git解决冲突&多条commit合并成一条

背景

笔者的公司要求是每笔提交仅允许有一个commit,但是当笔者提交代码的时候会跟主仓代码有冲突,此时用git merge的话会多出一个commit信息,则既需要解决冲突并只提交一个commit;
和主仓没有冲突的读者,也可以通过这种方式做到多个commit合一的效果。

实现

# 更新主仓信息,笔者主仓名称为upstream,读者可自行修改
git fetch upstream
# rebase到主仓master分支最新的位置,读者可自行修改
git pull upstream master --rebase
# 修改冲突代码后,提交commit(此次commit信息需要填写,提交后本地的所有修改都会合为这一个commit)
git commit
# 强制推送到指定的分支,origin是笔者的私仓名称,master是要提交到的分支,读者可自行修改
git push -f origin HEAD:master
### 将多笔提交合并为一笔提交的方法 在 Git 中,可以通过交互式变基(interactive rebase)的方式将多个提交合并一个提交。这种方法允许开发者清理提交历史,使项目的历史更加清晰和易于理解。 以下是实现此功能的具体方法: #### 使用 `git rebase -i` 进行交互式变基 执行以下命令可以进入交互模式: ```bash git rebase -i HEAD~n ``` 其中 `n` 表示要处理的最近几次提交的数量[^1]。例如,如果希望合并最近三次提交,则运行: ```bash git rebase -i HEAD~3 ``` 打开的编辑器中会显示类似如下内容: ``` pick abcdefg Commit message 1 pick ghijklm Commit message 2 pick mnopqrs Commit message 3 ``` 为了将这些提交合并为单次提交,需将除第一个 `pick` 外的其他条目改为 `squash` 或缩写 `s`,表示将其与前一条提交合并: ``` pick abcdefg Commit message 1 squash ghijklm Commit message 2 squash mnopqrs Commit message 3 ``` 保存并关闭编辑器后,Git 会提示重新编写最终的提交信息。完该过程即可合并多次提交为单一提交[^4]。 #### 使用 `git merge --squash` 另一种方式是通过 `--squash` 参数来压缩分支上的所有更改至当前分支的一次提交中。具体步骤如下: 1. 切换到目标分支(假设为主分支): ```bash git checkout main ``` 2. 合并指定分支的所有改动但不创建新提交: ```bash git merge --squash feature-branch ``` 3. 提交合并后的更改: ```bash git commit -m "Squashed all changes from feature-branch" ``` 这种方式适用于需要将某个特性分支的所有工作整合为主分支上单独一次提交的情况[^3]。 #### 注意事项 - 在进行任何涉及重写的操作之前,请确保已备份重要数据或将变更推送到远程仓库以防丢失。 - 如果团队员已经基于即将被改写的提交进行了进一步开发,则应谨慎行事以免引起冲突或混乱[^2]。 ```python # 示例 Python 脚本用于自动化部分流程 (仅作演示用途) import subprocess def squash_commits(n): try: subprocess.run(['git', 'rebase', '-i', f'HEAD~{n}'], check=True) except Exception as e: print(f"Error occurred during squashing: {e}") if __name__ == "__main__": num_of_commits = int(input("Enter number of commits to squash: ")) squash_commits(num_of_commits) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值