git推送指定的提交到远程分支详细方法

默认情况下,git push会推送暂存区所有提交(也即HEAD及其之前的提交)到远程库,实际开发中可能因为功能没有开发完成,但是又必须提交部分修改好的代码就需要用到推送指定commit到远程分支。

第一种方式:

即符合git操作的规则,从最初的commit开始一个一个提交,但是不能实现指定中间某一个commit。(只能按顺序提交)

命令:

git push origin <commit SHA>:[remotebranch]

示例:

// 查看历史提交记录
PS E:\java> git log --oneline
94b005389 (HEAD -> fd) 项目组前后端实现
72887fb85 采购请款前端界面修改1
6bd1d23eb 采购请款前端界面修改
521ca71f9 成品整机association联查生产计划单
e2c8023d5 (origin/fd) 研发工作台布局构思
7e002693a Merge remote-tracking branch 'origin/stage' into fd

// 根据提交顺序一个一个提交
PS E:\java> git push origin 521ca71f9:fd
Enumerating objects: 43, done.
Counting objects: 100% (43/43), done.

第二种方式:

如果想要通过推送某一个特定的提交,但是这个提交之前还有其他的提交,我们可以通过git rebase -i 改变提交的位置,使其之前没有其他提交:

$ git rebase -i 或 git rebase -i a33d521

a33d521用来确定commit范围,表示从此提交开始到当前最新的提交(不包括a33d521)

1.查看历史提交记录

PS E:\java> git log --oneline -3
c944084e8 (HEAD -> fd) 第三次提交
55ad8ab2b 第二次提交
ee5f12d6c 第一次提交

2.将暂存区的提交列出来供我们操作

git rebase -i

顶部的commit提交排列顺序与git log排列相反,最先提交的在最上面。如果我们只想要将c944084e8推送到远端,我们首先可以将其所在行移动到首行(vi下,光标移动到当前行,输入命令:m 0即可),然后保存退出(vi下,输入命令:wq即可),然后按照第一种方式的步骤进行

😃注意:rebase后相应提交的hash码会改变

第三种方式:

采用cherry-pick:用新分支去拉取当前分支的指定commit记录,之后推送到当前分支远程仓库实现推送指定历史提交的功能

1.查看当前分支日志

PS E:\java> git log --oneline -4                 
c687fa068 (HEAD -> fd) 第四次提交
c944084e8 第三次提交
55ad8ab2b 第二次提交
ee5f12d6c 第一次提交

2.拉取远程分支创建临时本地分支

localbranch 为本地分支名 origin/fd 为远程目标分支

git checkout -b localbranch --track origin/fd

3. 执行cherry-pick,将修改代码的commit同步过来

// 同步commit
PS E:\java> git cherry-pick c687fa068            
[fd2 d7e164670] 第四次提交
 Date: Thu Mar 9 12:08:55 2023 +0800
 1 file changed, 1 insertion(+), 1 deletion(-)
// 查看同步后的commit
PS E:\java\cierp\cierp> git log --oneline -4     
d7e164670 (HEAD -> fd2) 第四次提交
2a715c4e0 (origin/fd) service接口修改
a94c890ba domain字段修改
86f615a8c 修复bug

4.push到远程分支

PS E:\java> git push origin fd2:fd
Enumerating objects: 31, done.
Counting objects: 100% (31/31), done.
Delta compression using up to 12 threads
Compressing objects: 100% (12/12), done.
Writing objects: 100% (16/16), 1.10 KiB | 1.10 MiB/s, done.

5.删除临时分支

git branch -d fd2
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值