在拉取请求中回滚/删除已推送分支的Git操作

4

我有一个已经推送到远程分支但尚未合并到主分支的本地分支,并且已经为此更改创建了一个 pull request。在这个提交中有一些不必要的文件。我想知道以下操作是否可行:

  • 保存/搁置我想要推送的本地分支中的文件
  • 删除本地分支和远程分支
  • 从主分支创建一个新的本地分支,将我想提交的修改后的文件移回去,进行提交并推送到远程。
  • 创建一个新的 pull request

非常感谢您的帮助和协助。


如果在该分支上只有一个修订版本,请修改它,然后强制推送到同一分支。这应该在PR中得到反映。 - eftshift0
感谢您的快速回复。我需要将其完全从更改集中排除,以使其无法被修改。此外,我认为我尝试还原它时弄乱了我的本地分支,所以希望重新开始,并想知道上述步骤是否能够满足我的需求。 - Mike
@Mike 你的意思是你的实际工作流程甚至禁止在简单功能分支上进行强制推送吗? - Romain Valeri
@RomainValeri,老实说,Git对我来说都是新的东西,所以我甚至不知道如何回答那个问题。我只是试图弄清楚如何排除一个本来就不应该被编辑的文件。因此,在我的想法中,似乎只要编辑文件以撤消更改,仍然会将其包含在推送中,这就是我不希望发生的事情。 - Mike
@Mike 是的,那正是我所怀疑的,不冒犯你。而eftshift0的评论(像往常一样)非常中肯。如果他没有回答,我会尝试给出一个实际的答案。 - Romain Valeri
1个回答

2
原则是这样的:实际上你不需要删除这个PR并创建一个新的。修改你的本地情况并将其推到服务器上会自动更新PR。步骤如下:
1)修改你的本地分支(从你的本地分支检出开始)
# undo the last commit whilst keeping the changes in the working tree (and staged files)
git reset --soft HEAD^

# remove the unwanted files from the to-be-committed list (the index)
git reset HEAD -- path/to/file1 path/to/file2
# as an alternative if you don't want to keep the changes in these files,
# use --hard here above, but before the --)

# redo the commit
git commit -m "your message here"

2) 使用强制推送将其推送到远程(因为远程已经有旧版本的提交,但我们在历史记录中将其删除了)

最初的回答:Push it to the remote with force.

git push --force origin HEAD
# or alternatively, since your branch is named br/bugfix1
git push --force origin br/bugfix1

3) 更新PR

只需进入您的PR网页并刷新即可。


到目前为止一切都很好,我已经到了最后一步,想要验证一下 "git push --force origin HEAD" 命令是否只会将更改推送到我的远程分支。换句话说,假设我的本地/远程分支名为 br/bugfix1,在命令行工具中,当前分支就是这个。那么命令 "git push --force origin HEAD" 将会推送到远程版本的 "br/bugfix1" 分支,对吗?还有,以上没有任何冒犯之意,非常感谢你的帮助。 - Mike
@Mike 我理解你在这里的谨慎,不会有任何冒犯 :-) 是的,如果你的 HEAD 仍然指向你的本地分支 br/bugfix1,只有它会被推送,没有其他的。你也可以选择 git push origin br/bugfix1 - Romain Valeri
好的,最后一个问题,我保证(希望)这就是最后一个问题……如果我选择“git push origin br/bugfix1”,我不需要使用--force吗? - Mike
@Mike 哇,我的错,但当然这并不改变需要使用 --force 的必要性,所以最终是:git push --force origin br/bugfix1。我们永远不会向 git 投降!(大部分感谢 torek - Romain Valeri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接