Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何制作上一个git提交的副本并使其成为头文件_Git_Github - Fatal编程技术网

如何制作上一个git提交的副本并使其成为头文件

如何制作上一个git提交的副本并使其成为头文件,git,github,Git,Github,我试着回复,但它总是让我产生恼人的冲突 我想要这样的东西: A-B-C-D-E-F A-B-C-D-E-F-D' 有没有一个简单的方法可以做到这一点 从您的帖子和评论中我可以看出,您希望恢复F和E,但将它们保留为历史记录。你能做的是: git revert HEAD~n..HEAD 如果您将n替换为头的后面(您当前的提交)D之后的提交是 这样做的目的是将HEAD和D之后的提交之间的每次提交按相反顺序还原,确保没有冲突 当该范围内存在合并提交时,这将变得更加复杂。如果有,请执行以下操作: git

我试着回复,但它总是让我产生恼人的冲突

我想要这样的东西:

A-B-C-D-E-F

A-B-C-D-E-F-D'


有没有一个简单的方法可以做到这一点

从您的帖子和评论中我可以看出,您希望恢复
F
E
,但将它们保留为历史记录。你能做的是:

git revert HEAD~n..HEAD
如果您将
n
替换为
头的后面(您当前的提交)
D
之后的提交是

这样做的目的是将
HEAD
D
之后的提交之间的每次提交按相反顺序还原,确保没有冲突

当该范围内存在合并提交时,这将变得更加复杂。如果有,请执行以下操作:

git revert -m  1 HEAD~n..HEAD

它将首选合并提交的第一个父分支,并删除在其他分支中合并所引入的更改。做这件事时要非常小心,因为它可能不会达到你真正想要的效果。

从你的帖子和评论中我可以看出,你想还原
F
E
,但要将它们保留为历史。你能做的是:

git revert HEAD~n..HEAD
如果您将
n
替换为
头的后面(您当前的提交)
D
之后的提交是

这样做的目的是将
HEAD
D
之后的提交之间的每次提交按相反顺序还原,确保没有冲突

当该范围内存在合并提交时,这将变得更加复杂。如果有,请执行以下操作:

git revert -m  1 HEAD~n..HEAD

它将首选合并提交的第一个父分支,并删除在其他分支中合并所引入的更改。要非常小心地执行此操作,因为它可能不会完成您实际想要的操作。

与公认的答案相反,我建议(假设您正在谈论
主分支,您希望在保留跳过的分支的同时,将其延迟几次提交):

这会给你一个非常清晰的历史,而你移除的垃圾仍然存在

    master
      |
      v
A-B-C-D
       \
        E-F
          ^
          |
        old_master
任何进一步的承诺都将导致历史的分歧

        master
          |
          v
A-B-C-D-G-H
       \
        E-F
          ^
          |
        old_master

所以E和F永远不会弄乱你的“真实”历史,但你总是能够回到它们。如果你最终决定不再需要它们,你只要
git branch-D old_master
,它们就消失得无影无踪了。

与公认的答案相反,我建议(假设您谈论的是
主分支
分支,您希望在保留跳过的部分的同时,将一些提交延迟):

这会给你一个非常清晰的历史,而你移除的垃圾仍然存在

    master
      |
      v
A-B-C-D
       \
        E-F
          ^
          |
        old_master
任何进一步的承诺都将导致历史的分歧

        master
          |
          v
A-B-C-D-G-H
       \
        E-F
          ^
          |
        old_master

所以E和F永远不会弄乱你的“真实”历史,但你总是能够找到它们。如果当你决定不再需要它们时,你只要
git branch-D old_master
,它们就消失得无影无踪了。

你为什么要在头上播放git commit的副本,这又有什么意义呢?我把以前的commits但我想让它们成为历史有没有
E
F
的特定元素需要保留?为什么不直接还原
F
E
并用它来完成呢?在当前
头上还原不会引起冲突。你为什么要在头上播放Git提交的副本,还有什么这样做的意义是什么?我把我以前的承诺搞砸了,但我想让它们成为历史。你想保留
E
F
的特定元素吗?为什么不直接还原
F
E
并用它来完成呢?对当前
头部的还原永远不会引起冲突。