微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从分支内的文件夹中删除提交

如何解决从分支内的文件夹中删除提交

我在我的分支中错误地对 properties 文件夹进行了一些更改。它提交了来自多个文件的更改(包括我想要的文件

我想从我的分支中删除所有提交到 properties 文件夹。然后我应该从 master 分支中提取更改以保持最新。

这怎么可能?

谢谢

解决方法

git 中的提交是整个存储库的不可变快照,因此您实际上需要在这里创建新提交,其中包含您想要的更改。

执行此操作的标准工具是 git rebase,这可能会令人困惑,但非常值得了解。

1.确保您的工作副本干净

每当您运行任何会更改您的工作副本的命令时 - 例如合并、拉取、变基 - 您应该确保没有任何未提交的更改。否则,您可能会面临这些更改丢失或提交到您不希望的地方的风险。

git status

如果这显示未提交的更改,请决定是否需要它们,然后提交或丢弃它们。如果不确定是 "stash" them,这是一个相当安全的做法。

2.创建一个备份分支

如果出现问题,请创建一个保留当前历史记录的新分支,以便您知道如何返回。运行以下将创建一个名为“backup-before-rebase”的分支,指向您当前已检出的内容,但不切换到它

git branch backup-before-rebase

3.找到要编辑的提交范围

rebase 命令将重新创建一系列提交,以您当前检出的内容结束,但它需要知道从哪里开始。这可以是:

  • “main”或“master”或“develop”,或任何您“分支”的分支名称
  • “HEAD~3”、“HEAD~4”等,其中的数字是您需要返回历史记录的提交次数(基于查看 git log

4.开始“交互式变基”

选择您决定的起点,并将其用作 git rebase -i 的参数,例如

git rebase -i main
git rebase -i master
git rebase -i HEAD~3

5.编辑说明

git 将弹出一个文本编辑器(与输入提交消息时弹出的文本编辑器相同)。每行包含三件事:

  • 一个动作,默认为“pick”
  • 提交哈希
  • 一个描述,仅供参考,编辑它没有任何作用

在列表中找到需要修改的提交,将“pick”改为“edit”。

现在保存并退出编辑器,git 将开始运行您的指令。

6.修改提交

在您标记为“编辑”的每次提交时,git 都会停止并让您有机会进行更改。

在您的情况下,您希望更改提交以包含未更改的“属性”文件夹。首先,从已知好的副本中恢复文件 - “HEAD^”表示“当前提交的父级”,它应该在这里工作:

git restore --source=HEAD^ properties/

这就像您刚刚编辑了所有这些文件一样,因此现在我们可以将它们暂存以进行提交,但我们不是创建新提交,而是修改现有提交:

git add properties
git commit --amend

最后,我们告诉 git 进行下一步的 rebase:

git rebase --continue

7.结束

一旦到达说明的末尾,您将拥有一个新的、重写的分支。如果您已经将分支推送到某个地方,则需要“强制推送”它 - 小心这一点,它会影响从该分支拉出或分支的任何其他人:

git push --force-with-lease

如果出错

如果您在 rebase 中途陷入困境,您可以“中止”rebase 并重新开始:

git rebase --abort

如果这不能让您达到您希望的效果,您可以通过“硬重置”从之前返回到您的备份分支。这会丢弃您工作副本中的所有内容,并将当前分支指向您的备份:

git reset --hard backup-before-rebase
,

免责声明:git rebase 是一项高级操作,很难恢复原始提交。确保您了解它的作用并有备份!

使用交互式变基 (git rebase -i) 来编辑您的“错误”提交:

git rebase -i HEAD~10 # rebase last 10 commits

将命令从“pick”更改为“edit”,用于您要...编辑的提交。然后关闭编辑器以启动 rebase。 Git 现在将在每个具有“编辑”命令的提交处停止。修复您的更改,例如检查文件夹的先前状态(git checkout HEAD^ -- properties/,修改您的提交(git commit --amend),然后运行 ​​git rebase --continue 以应用下一个补丁。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?