Git 如何返回到提交修复程序/补丁程序,但之后不更改任何内容?

Git 如何返回到提交修复程序/补丁程序,但之后不更改任何内容?,git,Git,我想回到一个旧版本的代码,并只修复该版本。我不希望修复集成到master中,因为在需要修复的版本之后出现的任何版本都不会出现问题。以下图为例,我想移动到C3,进行修复,提交更改,但不在其下方的任何提交上合并这些更改(C4和C5) 我在考虑做什么 git签出C3 git签出-b补丁 应用修复程序 git commit-m“修复旧版本的软件” git签出C3 git合并补丁 并将其保留在那里,供以后编译软件时使用。不要将修复应用于C4或C5,因为它们不会出现问题。我会这么做,但我不确定这是否正确。因

我想回到一个旧版本的代码,并只修复该版本。我不希望修复集成到master中,因为在需要修复的版本之后出现的任何版本都不会出现问题。以下图为例,我想移动到C3,进行修复,提交更改,但在其下方的任何提交上合并这些更改(C4C5

我在考虑做什么

  • git签出C3
  • git签出-b补丁
  • 应用修复程序
  • git commit-m“修复旧版本的软件”
  • git签出C3
  • git合并补丁
  • 并将其保留在那里,供以后编译软件时使用。不要将修复应用于C4或C5,因为它们不会出现问题。我会这么做,但我不确定这是否正确。因此,问题是:有没有一种方法可以返回到提交修复程序/修补程序,但在修复程序或修补程序完成后不更改任何内容?或者换句话说,在提交感兴趣的内容后不将更改合并到任何内容中?我对C3所做的任何更改都是为了修复该版本的软件,我希望他们留在那里,然后HEADmaster仍然指向C5,在C3编译并发布之后,其他人可以继续使用C5,就好像什么都没有发生过一样



    物理上不可能更改任何提交。因此,您在这里提出的建议很简单,而且非常有效:commit
    C3
    将永远保持commit
    C3
    。但是,您需要发布一个补丁版本的
    version1.0.4
    ,因为这是commit
    C3
    ,它是不变的

    您不能将错误修复提交合并到提交
    C3
    ,但不需要这样做。它是一个分支。你已经把你的承诺和新的承诺画在了底部;我喜欢把我的画向右边。所以我会把你的情况画成这样:

         tag:v1.0.4
             |
             v
    C1--C2--C3
              \
               C4 <-- tag:v1.0.5
                 \
                  C5   <-- master (HEAD)
                   ^
                   |
               tag:v1.0.6
    
    进行新提交时,新提交的父级为
    C3
    ,名称
    patch
    指向新提交:

         tag:v1.0.4
             |
             v
    C1--C2--C3--C7   <-- patch (HEAD)
              \
               C4 <-- tag:v1.0.5
                 \
                  C5   <-- master
                   ^
                   |
               tag:v1.0.6
    
    标签:v1.0.4 | v
    C1--C2--C3--C7谢谢。解释得很好。我现在明白了。
         tag:v1.0.4
             |
             v
    C1--C2--C3--C7   <-- patch (HEAD)
              \
               C4 <-- tag:v1.0.5
                 \
                  C5   <-- master
                   ^
                   |
               tag:v1.0.6