Git 如何将分支中的稍后提交合并到主节点中,从而放弃一些早期更改?

Git 如何将分支中的稍后提交合并到主节点中,从而放弃一些早期更改?,git,Git,对不起,我是git/github的新手,即使我不知道如何用正确的词来回答这些问题,所以我画了一些图表 在branchdev中,我有两个提交,一个是对文件a.py的更改(提交2),另一个是对文件b.py的更改(提交3) 我的第一个问题是,现在我希望在未来的commit 4中,我的master具有commit 3中的文件b.py所具有的特性,而不是更改后的a.py。如何使用git 我的第二个问题是,假设github中存储库的所有者是A,然后我从提交1派生/克隆了存储库,并使用两个提交2和3创建了开发

对不起,我是git/github的新手,即使我不知道如何用正确的词来回答这些问题,所以我画了一些图表

在branchdev中,我有两个提交,一个是对文件a.py的更改(提交2),另一个是对文件b.py的更改(提交3)

我的第一个问题是,现在我希望在未来的commit 4中,我的master具有commit 3中的文件b.py所具有的特性,而不是更改后的a.py。如何使用git

我的第二个问题是,假设github中存储库的所有者是A,然后我从提交1派生/克隆了存储库,并使用两个提交2和3创建了开发分支,如前所述。同时,A已进行了一些提交,表示1'和1''。现在,我想将对文件b.py所做的更改(而不是a.py)提交给主分支。我该怎么做呢。我知道这一定是拉的要求,但我还没有弄明白

对于这两个问题的具体答案,我将不胜感激,但对于一些免费git课程/书籍的适当部分,我也非常感激。多谢各位

更新:

我的缺点是,我在这里将另一个分支命名为“dev”,实际上这是一个“feature”分支,该功能是通过提交2时对文件a.py的更改启用的。因此,在我能够以某种方式在文件a.py的代码中进行某种组合以涵盖这两种情况之前,master是一个软件,“dev”/“feature”分支将是另一个软件

但是,使用commit 3对文件b.py进行的更改对这两个分支/软件都有好处。问题是,如果我在“dev”/“feature”分支中的文件a.py之前更改了文件b.py,那么根本就没有问题。在这种情况下,我可以将文件b.py上的更改合并到主文件,并通过更改文件a.py继续开发功能分支。我知道目前的情况不太好,但这两个变化都不是错误的,我不想摆脱它们

我的(理论)解决方案:

  • 从commit 1创建另一个分支,称为“改进”,修补文件b.py的差异,将其合并到master,称为commit 4
  • 然后从commit 4中创建另一个名为“feature A”的分支,修补文件A.py的差异,并让它自己运行
这样做明智吗

  • 用樱桃采摘

    git log
    -查找提交哈希

    git cherry pick“commit hash”
    -应用特定提交的更改

  • 最简单的方法是从master创建新的brach,然后从dev分支选择必要的提交,然后发出Pull请求

  • 用樱桃采摘

    git log
    -查找提交哈希

    git cherry pick“commit hash”
    -应用特定提交的更改

  • 最简单的方法是从master创建新的brach,然后从dev分支选择必要的提交,然后发出Pull请求


  • 很大程度上取决于您创建此分支的原因(
    dev
    )。这里的目标是什么?如果这是一个特性分支,而您执行了commit 2和commit 3,并且您只想放弃commit 2(这完全是一个错误),那么这是一个可能的操作。现在没有人会得到它

    但是,如果您不想扔掉commit 2,但又不想
    master
    或PR拥有它,那么问题是,这个分支到底是干什么的?在我看来,在这种情况下,这只是一个错误的分支。如果要将3而不是2合并到事物中,则应该创建一个具有3而不是2的不同分支

    换句话说,如果您只需要为文件b贡献一些东西,那么您只需要为文件b上的更改创建一个分支

    所以我要做的是完全重组这些分支。我会将更改分为影响文件a的分支和影响文件b的另一个分支。现在,您可以将影响文件b的分支合并到master,或将其作为PR发送,或其他方式


    然后,在本地,您可以将file-b分支合并到file-a分支中。现在,您和您自己都有两组提交,您可以继续处理file-a分支,该分支现在也包含file-b更改。

    很大程度上取决于您创建此分支的原因(
    dev
    )。这里的目标是什么?如果这是一个特性分支,而您执行了commit 2和commit 3,并且您只想放弃commit 2(这完全是一个错误),那么这是一个可能的操作。现在没有人会得到它

    但是,如果您不想扔掉commit 2,但又不想
    master
    或PR拥有它,那么问题是,这个分支到底是干什么的?在我看来,在这种情况下,这只是一个错误的分支。如果要将3而不是2合并到事物中,则应该创建一个具有3而不是2的不同分支

    换句话说,如果您只需要为文件b贡献一些东西,那么您只需要为文件b上的更改创建一个分支

    所以我要做的是完全重组这些分支。我会将更改分为影响文件a的分支和影响文件b的另一个分支。现在,您可以将影响文件b的分支合并到master,或将其作为PR发送,或其他方式


    然后,在本地,您可以将file-b分支合并到file-a分支中。现在,您和您自己都有两组提交,您可以继续处理file-a分支,该分支现在还包含file-b更改。

    您可以选择。我认为第一个问题是,您是否希望在提交2中进行更改,或者这些更改是一个错误,您是否希望消除它们。如果它们是错误的,那么最简单的方法就是在
    dev
    分支上执行“git revert”commit 2。然后
    dev
    将只进行commit 3更改,然后您可以继续并将该分支合并到您希望commit 3更改的任何地方

    如果您仍然想要提交2,并且您只想将2和3分开,那么事情就更复杂了