更改提交推到GitHub上...删除文件

问题描述 投票:0回答:3

Git的歪曲我的大脑。但是我觉得我一半了这个问题。

我犯了(两次)和推到GitHub上,但第一次提交包含不应被列入两个文件。所以我做了以下...

git reset --hard HEAD~2

这带来的后脑勺先用多余的文件提交。

HEAD is now at 1979096c2

现在,如果我修改,提交(并迫使推)只需要有这两个文件再次,在GitHub上确实这是正确的承诺?

为了更清楚......最初的(错误)提交包含4个文件。我想修改它只有2个文件。我在正确的轨道上?

git commit amend
3个回答
0
投票

而不是做一个硬复位的,你也可以做一个混帐复归。

git revert <commit_id>

使用git日志指的是你要恢复的提交ID。


0
投票

你是正确的,这将解决的事情。小心力推但正如你基本上是重写历史。任何人谁已经退出这些提交您要删除将从远程发散。如果你是在回购或分支机构工作的唯一的人,那也不会,虽然无所谓。


-1
投票

没有。

首先,当你说“修改,提交(并强制推送)”,你指的是git commit --amend命令?该amend选项的命名可能会有点混乱。虽然它确实反映了命令的目的,它表明,它编辑现有的承诺 - 它不这样做,因为那是不可能的。

你有复位后什么是这样的

O <--(master)
 \
  A -- B <--(origin/master)

所以,你犯(AB)的两倍,但A包含您不希望在回购协议的文件,所以你(A之前)重置回2次的提交。然后要了解的第一件事是,如果你做一个commit --amend从这里将修改提交O - 没有犯A

而且,这是什么意思为“修正”一提交,因为 - 正如我上面所说的 - 你不能更改现有的承诺?嗯,这意味着你创建一个新的提交 - 其中有一个新的ID - 与“取代”老犯了它。这听起来像吹毛求疵,而是因为“替代”是很重要的一个承诺不会去做所有那些你可能会认为它会做的事情。

让我们假设你重新提交A。在所描述的例子,这将是git reset --hard master^(1分支的顶端之前提交 - 所以你已经签出的承诺,这是“错误的”)。现在你有

O -- A <--(master)
      \
       B <--(origin/master)

现在,您可以编辑worktree(即删除不需要的文件),然后你可以告诉混帐到“修改”提交A。但是,你得到的是

O -- A -- B <--(origin/master)
 \
  C <--(master)

C是一个新的ID的新承诺。如果你只在commit --amend之前进行小的变化,那么它主要适用同样的变化,相对于O,作为A - 但它仍然是一个完全不同的承诺。但只有在当地的分支机构 - - 在当地分行的历史,C取代A不是整个仓库。 B仍然认为A作为其母公司,并origin/master仍然指向B

如果你再用力一推,你会移动到origin/master C。这是一个历史的编辑,如果存储库是与他人分享其具有的后果。参见“从上游底垫回收”的git rebase文档;此部分是适用于任何重写,无论它是否涉及rebase命令。还要注意的是,如果你没有正确协调力推与回购的其他用户,它有可能恢复时,它们中的任何一个都会做错事,并撤消所做的更改。

因此,除了与A更换C,这种操作由分支历史删除B,因为“替换为AC不就地更换整个存储库。

你可以通过衍合从B AC解决这个问题。有几个方式去说,如

git checkout origin/master
git rebase --onto master HEAD^

这给了你

O -- A -- B <--(origin/master)
 \
  C -- B' <--(master)

在这里,我使用的符号表示,新的提交(B')应用相同的变化老犯(B)相对于新基地 - 但它仍然是一个全新的提交。再次,这是一个历史的改写,你会与任何其他用户,并力推协调。

根据为什么这些文件应该从回购被排除在外,这也可能是重要的是知道,这不(还)物理删除原来的历史记录(包括已删除的文件)。您当地的回购将保留它们至少只要旧的历史遗存中引用日志。还有你可以采取在本地执行较早的清理步骤;但远程(取决于它是如何托管)可能会或可能不会有从那里删除文件手续便捷。并没有什么可以做会保证文件从任何可能存在的其他克隆删除。

因此,如果文件包含敏感信息(如果其他人有访问远程),您将需要把该信息泄露。如果文件是简单的大,你可以搜索现有的问题和解答,详细说明了如何从历史中清除他们恢复的空间

© www.soinside.com 2019 - 2024. All rights reserved.