git系列之rebase变基与commit压缩

本文介绍了Git的两种代码管理方法:cherry-pick和rebase,以及解决冲突和回退提交的技巧。通过压缩提交、解决冲突、合并分支和回滚版本,帮助开发者更有效地管理代码历史和保持分支同步。

1. 方法1:1 git cherry-pick替代git rebase,可以作为一种的rebase的方法

//替代rebase的一种新的方法,比较好用,记录以下

1.第一步将修改的代码,提交后利用squash压缩成一个提交
2.第二步,分支更新到master,利用git cherry-pick 摘取压缩后的提交
3.注意,git cherry-pick出现矛盾后,需要手动搜索冲突代码,没有办法直接看到冲突的地方
4.提交后,查看检验格式域代码 

​​​​​​​​​​在这里插入图片描述

​​​

2. 方法2:git–rebase

step1:首先切到本地master分支,更新到最新的远程分支,或者更新到需要作为rebase基的分支

step2:切到待rebase的分支,执行:git checkout 当前分支名称

git rebase master

step3: 根据提示处理conflict

step4: 对合并后的修改文件,git status查看,git add增加

step5: 继续执行

git rebase --continues 直至出现Apply(表示rebase成功)

step6: git branch 查看,临时分支已经消失,回归正常流程,提交代码(add,commit,push)

注意:

当重构代码长时间没有合并代码的时候,会出现这种状况。自己有很多次提交,落后master主分支有很多次提交,这个时候需要是使用

3.1 commit压缩

git rebase -i HEAD~13 //13表示落后的分支数目

//针对自己的分支执行commit 信息压缩,同时对主分支进行commit信息压缩,
//最后在执行rebase,可以有效的减少rebase难度,达到最需要rebase一次既
//可以完成整体代码的追赶

在这里插入图片描述

3.2 git squash,多个commit融合与修改提交

step1: 首先确保代码已经rebase完成,查看落后提交分指数

step2:优先使用命令,因为git系统会自动定位到你自己的第一节点(git squash or git reabse or git cherry-pick)等

git rebase -i

step2:

git rebase -i HEAD~5 //5表示从当前分支数的commit信息

step3: 将待合并commit信息前a修改为s,使用#注释掉不需要的commit信息

step4: VIM编辑器, Esc : wq! 即可

4 git have diverged

git出现Your branch and ‘origin/master’ have diverged解决方法
如果不需要保留本地的修改:

git fetch origin
git reset --hard origin/master

如果需要保留本地的修改:

git rebase origin/master
git pull --rebase

解决冲突

git rebase --continue
git push origin master

5. 压楠瓜举例:

回退四个提交commit:
git rebase -i HEAD~4

in the vim editor:

--命令git branch -a,列出所有分支,git branch dev 创建本地dev分区
--命令git checkout dev 切换到dev分区,工作区变成dev分支的内容
--命令git checkout –b dev 创建并切换到本地分支dev (其中,git branch dev 是创建本地分支dev ;  git checkout dev 是切换分支)
--命令git branch –d dev 删除分支dev
--命令git clone --recursive -b $分支 $远程仓库 $路径

分支:master
远程仓库:ssh://git@git.dev.cnicgz.cn:6822/datacenter/maintain.git
路径:/path/to/src
仓库自动命名名为origin(origin相当于别名,运行git remote –v)

--命令git status  查看本地(工作区)更新还没提交到本地分支的文件(实际文件目录)
--命令git commit -am "本次提交描述"(结合git add. 和 git commit -m)工作区内直接提交到本地分支
git add . 把本地更新还没提交到本地分支的文件增加到暂存区==git stage .
git commit –m "本次提交描述" 把暂存区的内容提交到本地分支
--命令git push origin 本地分支:远程分支  
把本地分支内容提交到远程分支,origin为默认远程仓库

--命令git log 查看git commit 版本
--命令git fetch 下载远程更新,所有远程仓库内容下载到本地版本库(.git)
--命令git merge origin/cms 把当前本地分支和远程指定分支进行merge, 若出现(XXX|MERGING)状态, 利用 git diff 查看冲突无法解决的地方
--命令git pull origin 等于 git fetch && git merge,尽量使用git fetch 和git merge (67)来代替git pull
--命令git stash 备份工作区内容(从最近commit中备份),然后可以进行修复bug,修复完利用git stash pop恢复工作区内容
--命令git reset <commit_id> 默认-soft, 如果要hard程度就git reset --hard <commit_id>回退版本, 回退版本后想要回最新版本,
--命令git reflog找到版本号后再次git reset <commit_id>
--命令git rebase dev 把dev分支上的东西更新到当前分支上
修改了4个文件,在不放弃任何修改的情况下,其中一个文件不想提交,如何操作?(没add : git add 已经add: git reset –soft )
修改到一半的文件,突然间不需要或者放弃修改了,怎么恢复未修改前文件? (git checkout)
代码写一半,被打断去做其他功能开发,未完成代码保存?(git stash)
代码写一半,发现忘记切换分支了?(git stash & git checkout)
代码需要回滚了(git reset

前后对比:
在这里插入图片描述

​​​​在这里插入图片描述


在这里插入图片描述

<think>首先,用户的问题是:“git rebase之后怎么回退?”这是关于Git版本控制的,具体是rebase操作后的回退。 我需要用中文回答,因为用户指定了“请使用中文回答问题”。 回答完问题后,我必须根据用户的问题及我的回答提出3-5个§§相关问题§§。这些必须输出在回答的末尾,第一行必须是完整的“§§相关问题§§”,并且禁止换行分散。意思是“§§相关问题§§”必须在一行输出,然后列出问题。 回顾示例格式: - 先回答问题。 - 然后输出“§§相关问题§§”,在一行。 - 接着列出问题,如1. ··· 2. ··· 3. ··· 现在,针对问题:“git rebase之后怎么回退?” 关键点: - git rebase 是一个改提交历史的操作。 - 如果在rebase后出现问题或错误,需要回退到rebase之前的状态。 - 常见的回退方法是使用Git的reflog或reset命令。 步骤: 1. **使用 git reflog**:reflog记录所有HEAD更改,包括rebase。找到rebase前的提交哈希,然后reset回去。 2. **使用 git reset --hard**:直接重置到rebase前的状态。 3. **如果rebase已经完成**,可能需要用到ORIG_HEAD,它保存了rebase前的HEAD。 详细回答: - 解释reflog的使用:运行 `git reflog`,找到rebase之前的操作(如"rebase"或commit哈希),然后 `git reset --hard HEAD@{n}` 其中n是reflog索引。 - 或者,如果rebase刚刚完成, `git reset --hard ORIG_HEAD` 可以直接回退。 - 强调备份以防万一。 现在,构建回答: - 开头:直接回答问题。 - 中间:提供步骤和解释。 - 结束:确保有§§相关问题§§。 然后,提出3-5个相关问题: - 这些问题是于我的回答和用户的问题。 - 例如: 1. 什么是git reflog? 2. 如何避免rebase冲突? 3. git reset和git revert的区别是什么? 4. rebase后如何解决冲突? 5. 什么时候使用rebase而不是merge? 确保3-5个问题。 完整结构: 1. 回答部分。 2. 一行输出“§§相关问题§§”。 3. 列出问题1. 2. 3. 等。 现在,写回答: - 中文回答。 - 简洁明了。 </think> ### 回答: 在Git中,执行`git rebase`操作后,如果需要回退到前的状态,可以按照以下步骤操作(确保操作前已备份当前工作目录以防意外): 1. **使用`git reflog`命令**: - 运行`git reflog`查看所有HEAD更改记录。 - 找到前的提交点(通常标记为"rebase"或类似操作,例如`HEAD@{n}`中的索引n)。 - 执行`git reset --hard HEAD@{n}`(例如`git reset --hard HEAD@{1}`)回退到该点。 2. **使用`ORIG_HEAD`引用**: - 如果刚刚完成,Git会自动创建`ORIG_HEAD`指向前的状态。 - 直接运行`git reset --hard ORIG_HEAD`即可回退。 3. **如果冲突未解决**: -中途(冲突暂停时),运行`git rebase --abort`终止并恢复原状。 注意事项:回退后,所有后的提交将被丢弃,所以建议仅在未推送(push)到远程仓库时操作。如果已推送,请使用`git revert`创建新提交来撤销更改。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大江东去浪淘尽千古风流人物

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

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

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

打赏作者

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

抵扣说明:

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

余额充值