【gitHub】在提PR(pull request)时提交指定的commit

一、背景

今天在提PR的时候,发现以前一些旧的commit也一起被提交上去了,这样比较不友好,在网上研究了一些方法,在这里总结记录一下。

二、方法

对于方法博主研究后有两种,一种是通过版本非强制回退,然后再重新commit一次,这样就能够合并之前的所有commit。另外一种是通过使用cherry-pick选择commit进行提交。博主推荐使用第二种。

2.1.版本非强制回退,合并commit

对于这种方法,需要特别注意的是,这种方法容易产生一些问题:

  • 若在这些commit之间,曾经从上游(upstream)仓库中合并新代码到自己的远程仓库,在log里面是有对应的记录的,也就是说合并commit的时候也会将其一起合并。这样会导致自己的远程仓库与上游仓库版本不一致,以至于无法提PR
  • 版本回退不能回退到之前提交过的PR版本前,也就是说只能回退到上个PR之后的第一次commit。否则也会与上游仓库冲突,无法提PR

因此,使用该方法需要注意不能从上游仓库合并到远程仓库,并且版本不能回退到上一次PR之前。命令如下:

git branch new_branch //新建本地分支
git log  // 查看commit记录,记住想要回退的版本id
git reset commit_id // 版本回退,注意不能使用--hard
git add .
git commit -m “commit message” //重新提交

运行上面的命令后,可运行git log查看新的commit记录。最后运行以下命令将该分支推送到远程仓库,并在新分支上提PR即可。

git push origin new_branch

2.2.使用cherry-pick进行提交

cherry-pick是在新分支下选择本地分支的commit记录进行合并的操作,因此只需要在本地新建一个上游仓库(注意不是远程仓库)的本地分支,再合并想要提交的commit即可。

  1. 首先,配置上游仓库地址并同步。

    git remove add upstream XXX.git // XXX.git是上游仓库地址
    git fetch
    
  2. github上或者在本地运行git log选取commit记录。
    注意:需要选择上次PR之后的除了merge操作的所有commitid

  3. 在本地从上游仓库中拉取新的分支。
    注意:upstream是上游仓库,在第一步配置过;origin是自己的远程仓库;main是主分支名。

    git checkout -b new_branch upstream/main
    
  4. new_branch的分支上cherry-pick所有commit记录。
    注意:要选择所有未提交PR的所有commit,这样才不会出错。

    git cherry-pick commit_id1 commit_id2 commit_id3 ......
    
  5. 将新分支推送到远程仓库。

    git push origin new_branch
    
  6. githubPR的时候选择新推送的分支即可。

  7. PR被接受后,可选择删除新建立的本地分支和远程分支。

    git branch -D new_branch // 在main分支删除new_branch分支
    git push origin --delete new_branch // 删除远程仓库分支
    

三、总结

以上两种方法,更推荐使用第二种,它并不像第一种有许多坑,用起来比较安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值