git push 后合并之前的commit

本文详细介绍如何使用Git命令合并并压缩多个提交记录为单一提交,包括reset、merge、commit和push等步骤。

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

Merge or squash commits in git after pushed

referer url: http://stackoverflow.com/questions/5189560/how-can-i-squash-my-last-x-commits-together-using-git

FOR EXAMPLE: 
I have 3 commits in history:
commit 1: #3333 zzzzzz
commit 2: #2222 yyyyyy
commit 3: #1111 xxxxxx
NOW, I want to squash last 2 commits

Step 1:

$ git reset --hard HEAD~2

then the output like this:

HEAD 现在位于 4cf49a1 #255 斗金绿色平台开发者列表可以按照选择拓展人员查看对应开发者列表

Step 2:

$ git merge --squash HEAD@{1}

then the output like this:

更新 4cf49a1..399379d
Fast-forward
压缩提交 -- 未更新 HEAD
 Controller/0000Controller.php           |  65 +++++++++++++++++++++++++
 Controller/111111Controller.php         |  22 ++++++++-
 Model/33333.php                         |  78 +++++++++++++++++++++++++++++-
 View/44444/5555.ctp                     |  10 +++-
 View/4444/666666.ctp                    |  41 ++++++++++++++++
 webroot/js/44444/xxxxx.js | 168 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 381 insertions(+), 3 deletions(-)
 create mode 100644 View/aaaa/xxx.ctp
 create mode 100644 webroot/js/aaaa/bbbb.js

Step 3:

$ git commit -m "#255 aaaaaa"

OUTPUT:

[master 8f35d2d] #255 aaaaaa
 6 files changed, 381 insertions(+), 3 deletions(-)
 create mode 100644 View/aaaa/bbbb.ctp
 create mode 100644 webroot/js/aaaa/bbbb.js

Step 4:

$ git push

OUTPUT:

To git@git.xxxx.net:xxxx/bbbb.git
 ! [rejected]        master -> master (non-fast-forward)
error: 无法推送一些引用到 'git@git.umlife.net:xxxx/bbbb.git'
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 'git pull')。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。

if push get errors, you need to force push:

$ git push origin +master

OUTPUT:

Counting objects: 27, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (15/15), 4.03 KiB | 0 bytes/s, done.
Total 15 (delta 9), reused 0 (delta 0)
To git@git.xxxx.net:aaa/xxx.git
 + 399379d...8f35d2d master -> master (forced update)

### Git Push合并本地分支到远程仓库 当执行 `git push` 将本地分支的更改推送至远程仓库之后,通常情况下不需要额外的操作来“合并”这些更改到远程仓库中的目标分支。这是因为 `git push` 命令本身已经完成了这一过程——它会把本地分支的内容更新到了远程对应的分支上。 然而,在某些场景下可能涉及到更复杂的操作流程: #### 场景一:直接推送并覆盖远程同名分支 如果希望将本地名为 `feature` 的分支直接推送到同样叫作 `feature` 的远程分支,并且允许强制更新(即覆盖掉远程已有内容),可以这样做[^1]: ```bash git push origin feature --force-with-lease ``` 需要注意的是,使用 `--force-with-lease` 参数相对安全一些,因为它会在强行推送之前检查是否有其他开发者在同一时间向该分支进行了提交;如果没有冲突则继续推进,否则会被拒绝从而保护他人的工作成果不受影响。 #### 场景二:先拉取再推送(推荐做法) 对于大多数情况而言,最佳实践是在推送前先从远程获取最新的改动并与当前分支进行合并或变基处理后再上传自己的修改。这有助于保持团队协作时代码库的一致性和稳定性[^2]: ```bash # 切换回主干(master/main)或其他基础分支 git checkout main # 更新本地main分支使之与origin同步 git pull origin main # 创建新特性分支并切换过去 git checkout -b new-feature ... # 编辑文件... # 添加变更到暂存区 git add . # 提交变更 git commit -m "Add some features" # 返回主线(main/master),准备集成新的功能 git checkout main # 再次确保最新状态 git pull origin main # 尝试通过merge方式加新特性 git merge new-feature # 或者采用rebase策略使历史记录更加线性整洁 git rebase new-feature # 完成后推送最终版本给远端服务器 git push origin main ``` 上述命令序列展示了如何在一个典型的开发周期内管理不同阶段的任务,包括但不限于创建、编辑、测试以及发布软件产品的新特性和修复程序缺陷等。 #### 场景三:跨分支推送 有时可能会遇到需要将一个特定名称的本地分支映射到另一个名字不同的远程分支上的需求。比如想要把自己的 `dev-fixes` 分支发送到上游项目的 `hotfixes` 分支上去,则可以用下面这种方式实现: ```bash git push origin dev-fixes:hotfixes ``` 这种语法允许灵活地定义源和目的之间的关系,但要特别小心不要误操作导致不必要的复杂度增加或是数据丢失的风险。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码的安徒生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值