git rebase, git revert 和 git cherry-pick

git rebase

git rebase branch_A branch_B: 在分支A上rebase分支B,该操作会把整条B分支的与A分支无关的commits悬挂到A分支的后面,需要解决冲突

  • 常见问题

    这时如果远程仓库有B分支,则git rebase后无法commit,因为本地commits树和远程commits树“分叉了”

  • 解决方法

    git pull --rebase: 将rebase到分支A的分支B重新rebase回原来的位置(origin/branch_B),这时重新rebase后的分支B就会包含分支A的属性,再git push

git cherry-pick

git cherry-pick commit_1 commit_2 ...: 将其他的提交commit_1、commit_2等悬挂到当前HEAD的后面,需要解决冲突

  • 常见问题

    git cherry-pick是以commit为单位的操作,如git cheery-pick commit_1后,当前HEAD得到的更新仅仅是commit_1针对与commit_1上一个commit的更新
    (即更新的信息为git diff commit_1_HEAD^ commmit_1_HEAD)。该操作并不能得到commit_1所在分支的之前的commits的更新

  • 解决方法

    • 如果还想同时获得commit_1之前的提交的更新,则需: git cherry-pick commit_1_HEAD^^ commit_1_HEAD^ commit_1_HEAD ...,这种操作有点类似于git rebase的拷贝复制版

    • 按照上述方法操作,很可能在cherry-pick commit_1_HEAD^^时就遇到了冲突,这时需要解决冲突,但不用git commit,而是在git add后直接git cherry-pick --continue就能继续cherry-pick

    • 如果想撤销上次的git cherry-pick,则需: git cherry-pick --abort

git revert

git revert HEAD: 重做当前的这次提交,版本会滚回到HEAD^,但重做的版本会悬挂到当前HEAD的后面

  • 常见问题

    如果git merge后想执行git revert HEAD操作,则会出现歧义问题,git不知道你要滚回到哪条分支的上一个commit

  • 解决方法

    git revert HEAD -m 1(or 2,3...): 选择-m 1则代表滚回父分支,2、3…则代表合并的其他分支

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值