GIT变基rebase与合并merge

GIT变基rebase与合并merge

参考链接:
GIT使用rebase和merge的正确姿势
git pull --rebase的正确使用
https://git-scm.com/docs/git-rebase

注意项:

  • git pull 命令默认采用 --merge 方式更新代码;
  • 当你基于a点进行开发,他人已在a点之后进行了一次提交;
  • 若此时进行commit会报错,需先pull(idea插件会自动pull);
  • 此时pull便会产生merge commit,导致日志线杂乱;

git pull --rebase场景

  1. 多人基于同一个远程分支开发
  2. 下游分支拉取上游分支

各场景使用流程总结

1.多人基于同一个远程分支开发时:

# 把本地发生改动的文件贮藏一下
$ git stash

# 把远程最新的commit 以变基的方式同步到本地
$ git pull --rebase

# 把本地的commit 推送到远程
$ git push

# 把本地贮藏的文件弹出,继续修改
$ git stash pop

2.下游分支拉取上游分支时:
如:A分支拉取master分支

# 把远程最新的 commit 以变基的方式同步到本地
$ git pull orign A --rebase
# 变基到master分支 
# 会将A分支中与master的分叉提交,合并到master的最终提交之后
# HEAD仍处于A分支的最后一次提交(不会切到master分支,master分支不变)
$ git rebase master
# 在rebase的过程中,也许会出现冲突(conflict)。
# 此时,Git会停止rebase并会让你去解决冲突;在解决完冲突后,用git add命令去更新这些内容的索引(index),然后
$ git rebase --continue
# 中途任何时候 都可以终止rebase
$ git rebase --abort
# 强制推送到A分支
# 直接push会报错error: failed to push some refs to 
# --force 容易出现事故,所以确保没有问题的情况下必须使用 --force 参数才能提交===不建议使用===
$ git push origin A --force-with-lease
## Git的1.8.5 版本后使用 --force-with-lease  可以更安全地进行强制推送
# 在使用 git push --force-with-lease 命令被拒绝时,你需要 fetch 仓库,
# 然后确认其他人是否对此分支有新的修改,如果没有,你才可以继续强制推送
$ git fetch
# 在 fetch 完毕之后,请一定检查此分支是否已经被其他人修改,
# 如果有新的提交,应该进行一次 merge 或者 rebase
$ git rebase
# 此后,再次进行推送或强制推送即可
$ git push --force-with-lease

git rebase

# 在 A分支执行 git rebase master;
# 会将A分支中与master的分叉提交,合并到master的最终提交之后
# HEAD仍处于A分支的最后一次提交(不会切到master分支,master分支不变)
$ git rebase master
# 若要将合并后的内容合并至master分支
# 1、切换到master分支,执行git rebase A 将A中的不同合并到master
$ git checkout master
$ git rebase A

git cherry-pick

# 在 A分支执行下列命令 git cherry-pick <commit_sha1>  <commit_sha2> ... 可多个
# 会将其他分支对应hash的提交记录抓取到A分支
$ git cherry-pick <commit_sha1>  <commit_sha2> 

变基交互界面可选操作

p, pick 保留该commit
r, reword 保留该commit,但修改注释
e, edit 保留该commit,但修改提交
s, squash 保留该commit,将其前一个commit合并
f, fixup 操作与squash相同,但丢弃注释
x, exec 执行shell命令
d, drop 丢弃该commit 

合并多个提交

  • Git提交原则经常是小功能多次提交
  • 但是有时需要在完成功能之后将多个连续的提交合并成一个
  • 或者进行分支合并时,只保留一个提交,以保证分支简洁
  • 便于从指定版本拉取新分支进行开发或者回滚

方式一:
参考:https://zhuanlan.zhihu.com/p/139321091

# rebase -i 进入rebase交互界面
# 显示<commit_sha>指定版本号之后的 提交记录(不含commit_sha)
# 执行后 会弹出<commit_sha> 之后的所有提交
# 顺序为从旧到新
$ git rebase -i <commit_sha>

# 或使用以下指令进入并显示最近n条提交记录
$ git rebase -i HEAD~n

# 将新提交合并到旧提交, 将需要合并的commit左侧的 pick 改为 s
# 操作同shell
# 若操作导致保存退出后报错,可使用 git rebase --abort 取消变基

# 修改提交信息

交换提交顺序合并提交

# 
$ git rebase -i HEAD~4

# 将新提交移动到指定位置(dd删除p粘贴)
# 将其左侧pick 改为f(参见上方“变基交互界面可选操作”部分) 
# 保存退出
# 查看提交历史git log --stat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值