Git修改已经被覆盖的提交

本文介绍了一种在不影响其他提交的情况下,对已被覆盖的提交进行修改的方法。通过使用git rebase命令,可以方便地编辑特定的历史提交记录。
部署运行你感兴趣的模型镜像

本文摘选自文章:【Jitwxs】Git教程【优快云】Git教程


如果你不想看详细的描述,直接看步骤即可:

1.git rebase -i HEAD~n,将要修改的提交状态改为edit

2.修改文件

3.git add

4.git commit --amend

5.git rebase --continue

假设我们目录下有三个文件,分别是digit.datletter.datsymbol.datdigit.dat中存放着数字,letter.dat中存放着字母,symbol.dat中存放着符号。

我们先提交digit.dat,然后提交letter.dat,最后提交symbol.dat:

此时我们想起来,letter.dat中仅仅存放了小写字母,大写字母被遗忘了,我们要把大写字母补充进去。这时候有两种解决方法:

  • 修改letter.dat内容,并发起一次新提交

  • 不发起新提交,对之前的那次提交做修改

我们不讨论发起新提交的情况,仅仅讨论如何对那次提交做修改。你也许会说,这很简单啊,直接使用命令reset HEAD^或者reset 8cc5dc不就好了吗?

不错,这没有问题,但是这样的话我们对symbol.dat的那次提交也被撤回了,这显然是一个笨方法,特别是当你要修改的那次提交被覆盖的很深的情况下。

有没有在不影响其他的提交的情况下,对已经被覆盖的提交做修改的方法呢?答案是有的。

Step1 : git rebase -i HEAD~n

我们使用命令git rebase -i HEAD~2列出最新的两次提交:

git rebased命令的交互命令中,首先逆序存放了我们最新的两次提交,最前面的状态为pick。下面也提示了我们可以执行哪些命令,这里我们这里只使用它的edit功能。

将我们要修改的那次提交状态改为edite,也就是将第一行内容改为:

edit 8cc5dcb add letter.dat

然后保存退出:

git已经提示我们此时已经暂停在了8cc5dc这一次提交上,后面新的提交此时应该被隐藏掉了,查看日志验证我们的判断:

不出所料,添加symbol.dat的那次提交已经被隐藏掉了,添加letter.dat的那次提交已经成为当前最新的提交了,这时候我们就可以轻松对它进行操作了。

Step2 : 修改文件内容

Step3 : git addgit commit --amend

其实之前的图上已经提示我们如何操作了,先git add,然后执行命令git commit --amend提交变更。

Step4 : git rebase --continue

此时就已经完成了对那次提交的修改,查看日志和文件内容,大功告成。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 如何恢复Git中被覆盖的历史提交记录 当遇到Git历史提交被意外覆盖的情况时,可以采取特定措施尝试恢复这些丢失的提交。对于通过`git reset --hard`并强制推送(`git push origin -f`)而丢失的提交记录,一种方法是从其他克隆副本中找回数据。然而,在单个仓库内,如果已经执行了上述操作,则可以通过以下方式尝试恢复: #### 方法一:利用Reflog查找未引用对象 即使进行了硬重置和强制推送,本地存储库中的reflog仍可能保留着指向旧提交的指针。这允许用户定位那些不再处于分支顶端但仍存在于数据库内的提交。 ```bash git reflog ``` 该命令会显示一系列的操作日志条目,其中包含了每次工作树或HEAD改变的时间戳、摘要以及描述。找到希望恢复的那个提交ID之后,就可以基于这个哈希值创建新的分支或者直接进行软/混合型重置[^1]。 #### 方法二:借助GitHub平台特性 如果是托管于GitHub上的项目,并且在执行破坏性的push之前有其他人拉取过最新的更改,那么可以从他们的forks里同步更新回来。另外,某些情况下管理员也可能拥有备份机制能够帮助解决问题。 需要注意的是,一旦强制推送到共享远程仓库,就很难保证所有协作者都保存了一份完整的提交链路副本。因此建议团队成员之间保持良好沟通习惯,避免不必要的冲突发生。 #### 示例代码片段展示如何使用`git reflog`恢复指定版本: ```bash # 显示所有的动作记录 git reflog # 假设我们找到了一个合适的commit hash,比如abcde1234567890abcdefg # 创建一个新的分支指向那个提交 git branch recover_branch abcde1234567890abcdefg # 或者直接reset当前branch到那个位置(谨慎操作) git reset --soft abcde1234567890abcdefg ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值