Git:从Pull Request中删除文件

时间:2016-08-03 12:37:16

标签: git github

我错误地将现有文件的本地更改添加到了我的PR中。 我想仅还原此文件而不在本地删除此文件。 我只是希望它不会出现在Pull Request中。 我并不想创建新的分支,因为很多人都对此PR中的其他文件发表了评论。

12 个答案:

答案 0 :(得分:17)

您可以使用git reset“取消暂停”特定文件,然后修改原始提交:

git reset HEAD^ /path/to/file
git commit --amend --no-edit
git push -f

这不会影响工作副本中文件的版本。

或者,如果要删除多个文件,可以将分支头重置为上一个提交并创建一个新文件:

git reset HEAD^  # move the tip of the branch to the previous commit
git commit -C ORIG_HEAD file1 file2 [...]  # list the required files
git push -f

答案 1 :(得分:16)

如果您更新了已存在的文件并希望将其从PR中删除:

假设您正在staging的某个分支上工作,并且您发布了一个名为validate_model.py的文件。

要从PR 中删除此文件并还原其更改,只需执行以下操作:

git checkout staging -- validate_model.py

答案 2 :(得分:8)

  

git checkout - 文件名

这将放弃对文件的先前更改,并将其还原为上次提交的更改。

您可以在此处了解详情Git-Basics-Undoing-Things

阅读“修改已修改文件”部分。

答案 3 :(得分:2)

我认为您的意思是您对某个文件X和其他文件YZ等进行了更改。现在,您要撤消 X上的更改。你不想在推送中显示它(我假设你的意思是推动而不是拉动),所以你不能简单地将X编辑回原来的状态(也许你意外地在源文件中提交了密码或其他秘密或其他......)。

如果只有一次提交在X中引入了您的更改,那么如果您使用git rebase来"跳过"那么这将是最简单的。提交。我们假设previouscommit是您更改之前的提交,brokencommit是您要删除的提交,然后:

git rebase --onto previouscommit brokencommit yourbranch

另一方面,如果X上的更改在多个提交中混合和/或与其他文件的更改相结合,那么(previouscommit是最后一个"好&# 34;承诺):

git checkourbranch
git -i rebase previouscommit

在交互式rebase中,为edit更改的每一行选择X操作,并手动编辑。 c / f git help rebase了解更多细节,但应该很明显该做什么。

答案 4 :(得分:1)

转到您的更改(在其中创建了拉取请求的位置)上的远程/起源分支(不是主分支)。从那里删除该特定文件。 在本地,存储您的更改,然后从远程分支中拉出所有更改,这将删除该文件,然后弹出存储以将所有更改以及已删除的文件取回。

以下是步骤:

  1. 从远程/原始分支中删除文件并提交(没有它就无法实现)
  2. git stash
  3. git pull
  4. git stash pop

答案 5 :(得分:1)

  • 让我们称您的 PR 是从 feature-branchmaster
  • 确保您在 feature-branch 中。
  • 现在可以说,您对 ./abc1.py 进行了一些不必要的更改,并且希望您的 abc1.py 与 master 相同。

运行以下命令:

git checkout origin/master -- ./abc1.py

现在如果你运行:

git status

您将拥有与 master 分支相同的更改。现在您可以提交更改并推送。

答案 6 :(得分:1)

我有一个简单的解决方案:

  • 移除 git 内存: git rm -r --cached 。
  • 添加:git add --all
  • 提交:git commit -m ""
  • 推送:git push origin

答案 7 :(得分:0)

要从添加新的拉取请求中删除该文件,请按照以下步骤操作,

git reset HEAD ^文件的路径

然后修改提交,然后强制推送。

要从现有的拉取请求中删除该文件(仅在您最新的PR中修改),请按照以下方式执行,

在任何文本编辑器(如Notepad或npp)中打开文件。 使用未修改的版本替换(剪切和粘贴)文件的内容(可能是从最新更新的源中复制或者根本没有更改)。 然后阶段并修改提交文件。然后做力推。

答案 8 :(得分:0)

您将需要知道最近一次提交(影响您要从“拉取请求”中删除的文件)的哈希值(此后),以及要撤消所有更改的文件的路径。然后,从您的工作目录中执行以下命令:

1) git checkout <my_feature_branch>
2) git checkout <latest_commit_hash> -- <Path_to_file_you_want_to_remove>

示例:

git checkout experimentBranch
git checkout xxxx123 -- MyProject/Resources/Constants.java

进行这些更改后,相关文件将恢复为分支开始时(即功能分支上的第一次提交之前)的状态。

答案 9 :(得分:0)

在我的特定情况下,它们只是不想被反映为:文件更改(无论要添加的提交如何)。

我刚刚删除了文件并执行了提交/推送。

更新“拉取请求”时,它们不再反映出来(好像从未添加过)。

我希望这会有用。

答案 10 :(得分:0)

大概有很多方法可以删除/撤消PR中的文件更改。
我没有找到执行此操作的确切步骤,所以在这里:

场景:

让我们假设您要从PR中删除的文件为:
C:\GitRepos\MyProject\SomeFile.cs

此文件已被修改或不包含任何更改(与主文件中的文件相同),但仍显示在PR中。

解决方案:

1)确保已签出从中创建PR的功能分支。

2)搜索文件提交历史记录: git log "C:\GitRepos\MyProject\SomeFile.cs"

您将看到以下格式的多个记录:

   commit <commit id> 
   Author: <author name> 
   Date: <Date of the commit> 
   <commit message>

3)在对SomeFile.cs进行任何更改之前,先查找提交。复制commit id

4)使用先前复制的commit id来检查提交:

git checkout <commit id> "C:\GitRepos\MyProject\SomeFile.cs"

5):如果现在检查git status,那么您将看到SomeFile.cs处于更改中。

6),您需要做的最后一件事就是通过简单地使用以下内容来提交这些更改:

git commit -m "Remove the SomeFile.cs from PR"

然后推送您的更改。 :)

答案 11 :(得分:-1)

您还可以使用“源代码树”应用程序并反转大块。如果没有文件更改,则将其从PR中删除。