删除github上的推送

时间:2014-02-05 19:44:41

标签: git github git-branch

我从Github(提交#5)中提取代码并进行了处理,但与此同时,其他人将#6和#7提交到了Github。我们决定只考虑我的工作,这意味着我们不再需要提交#6和#7了。

如何从Github中删除提交#6和#7的推送?

2 个答案:

答案 0 :(得分:0)

假设:

  • 相关分支的名称为master
  • 遥控器的名称为origin
  • origin/master指向#7

然后以下内容适合您:

git push --force origin origin/master^^:master

参数说明:

  • --force:默认情况下,git push只允许提前分支 - 新提交必须是旧提交的后代。但是,--force让您覆盖此安全检查。它允许您强制分支指向您想要的任何提交,即使它在拓扑上与分支当前指向的位置无关。

    警告:如果您需要--force,则表示您正在重写历史记录。重写历史可能会导致各种问题。在重写历史记录之前,请确保您和您的队友牢牢掌握Git的工作原理,并告诉每个人您将要重写历史记录。如果你不这样做,你将会遇到比git revert造成的不愉快更糟糕的后果。

  • origin:您要修改的远程存储库的名称
  • origin/master^^:master:这称为 refspec 。冒号右侧的部分(master)是您尝试更新的远程存储库中的分支的名称。冒号左侧的部分(origin/master^^)标识您希望远程分支指向的提交。所以在这种情况下,你告诉Git你希望origin的{​​{1}}分支指向master指向本地存储库的同一个提交。 origin/master^^之后的^^表示“第一个父亲的第一个父亲”,因此origin/master指的是origin/master^^指向的提交的祖父母。鉴于origin/master指向提交#7,origin/master应该引用提交#5。或者,您只需使用提交#5的SHA1标识符。

详细信息

从技术上讲,这不会从远程存储库中删除提交。如果没有对存储库的文件系统级访问权限,则无法删除提交(即,您作为系统管理员在GitHub中使用)。但它具有相同的效果:远程存储库中没有任何东西直接或间接地引用提交,因此它们只是坐在那里无法访问,浪费空间直到Git决定是时候垃圾收集它们。

答案 1 :(得分:0)

如果您不想冒险运行复杂的git语句,那么请求那些推动不需要的提交的人运行以下代码:

git reset --hard HEAD^

(那个提交#7的人应该先跑了),再次 git reset --hard HEAD^(那个提交#6的人应该继续下去)。

现在,您尝试提取代码,然后提交本地更改并推送到git。

这可能很傻......