如何将远程分支重置为旧提交

时间:2019-04-16 18:16:15

标签: git

我有一个远程分支,其中的提交过多。我想从中删除37fba70e之后的所有提交。这是在bitbucket上的样子:

enter image description here

我在本地进行过 Which reduces to maximize (- { W(sa).f(sa) + W(sb).f(sb) + W(ad).f(ad) + W(ac).f(ac) + W(bd).f(bd) + W(bc).f(bc) + W(dt).f(dt) + W(ct).f(ct) } ) ,现在我的日志如下:


    Maximize
        -x1-x2-10(x3)-7(x4)-12(x5)-7(x6)-x7-x8  (objective function)
    Given that (constraints)
      Capacity constraints:
         x{1-8} <= 1
      Flow conversations:
         x1 = x3+x4 --> ( x1-x3-x4 <=0 & -x1+x3+x4 <= 0)
         x2 = x6+x5 --> ( x2-x6-x5 <=0 & -x2+x6+x5 <= 0)
         x7 = x3+x5 --> ( x7-x3-x5 <=0 & -x7+x3+x5 <= 0)
         x8 = x4+x6 --> ( x8-x4-x6 <=0 & -x8+x4+x6 <= 0)
      Demand:
         x1 + x2 =2 --> ( x1+x2 <=2 && -x1-x2 <=2)

这看起来是正确的,因此我想将这些更改推送到bitbucket,但是git branch -f origin/start-defblock-on-long-hyphen 37fba70e并没有任何更改。输出很简单:

commit 37fba70ef7db1ce244d6e0c0d4e3b42d95dd7cb0 (HEAD -> origin/start-defblock-on-long-hyphen)
Author: First Last <first.last@company.com>
Date:   Thu Apr 11 13:28:51 2019 +0200

    added ')].' to valid end

commit 30fa3879845184405aba590b85380a6793ed5051
Author: First Last <first.last@company.com>
Date:   Wed Apr 10 16:02:31 2019 +0200

    accept to start def on moment start if start element is long dash

commit 57157406ab149b2934bfb2db7e6a6021bf950e02
Author: First Last <first.last@company.com>
Date:   Wed Apr 10 15:42:06 2019 +0200

    added long dash to valid start

和Bitbucket提交历史与以前相同。

我如何实现自己想要的?

1 个答案:

答案 0 :(得分:2)

您跑了:

import os

my_file = os.path.join('/home/stoplight25/Desktop/music/addSong',bashName)
new_mode = os.stat(my_file).st_mode | 0o100
os.chmod(my_file,new_mode)

这是一个错误!这创建了一个名为git branch -f origin/start-defblock-on-long-hyphen 37fba70e local 分支。这种情况(每个人)都很困惑,因为通常以origin/start-defblock-on-long-hyphen开头的名称是为您自己的远程跟踪名称保留的。

您的origin/输出现在以:

git log

这意味着您还运行了commit 37fba70ef7db1ce244d6e0c0d4e3b42d95dd7cb0 (HEAD -> origin/start-defblock-on-long-hyphen) ,现在它是您的当前分支。

要解决此问题,您可能应该先将本地分支重命名为一个更具本地外观的名称:

git checkout origin/start-defblock-on-long-hyphen

我希望这会失败,因为我相信您还有一个名为git branch -m origin/start-defblock-on-long-hyphen start-defblock-on-long-hyphen local 分支。如果是这样,您可以:

  • 重命名该分支,然后重命名该分支;
  • 删除该分支,然后重命名该分支;或
  • 检出该分支,将其强制为所需的提交,然后完全删除start-defblock-on-long-hyphen本地名称。

由您决定要采取哪种操作的确切选择-每个操作都稍有微妙的不同,但最终它们可能最终都具有相同的效果。 最安全是先重命名本地,然后以origin/命名的本地重命名:

origin/

(请注意,如果您已经有一个名为git branch -m start-defblock-on-long-hyphen old-start-defblock-on-long-hyphen git branch -m origin/start-defblock-on-long-hyphen start-defblock-on-long-hyphen 的本地分支,则会遇到另一个问题)。完成此操作后,您可以重复执行以下操作:

start-defblock-on-long-hyphen

应该立即失败,因为您必须使用git push origin start-defblock-on-long-hyphen 或同等命令在此操作的接收端命令Git(即Bitbucket上的Git)失去所有额外的提交,但是如果这就是目标,并且该Bitbucket Git的所有其他用户都同意可以丢失它们,继续使用--force。您可能还希望在推送过程中使用--force-u标志,即:

--set-upstream