0

我确定以前有人问过这个问题,但我不知道如何表达这个查询。

场景如下:我从我的 .bashrc 加载了一堆 bash 脚本,这些脚本存储在一个私有 github 存储库中,因此我可以跨计算机使用它们。每台计算机都有自己的怪癖,所以我为每台计算机都有一个分支。我在我的工作计算机上开始了这个项目,所以master有一堆与我的家庭环境无关的代码。

在这些分支中,我已经删除了与工作相关的更改,但是如果我可以创建work自己的分支并制作master一组基本的、非自定义的代码,那就更好了。这样,每当我在work分支中进行更改时,当我将家庭计算机重新设置为master. 但是,我想对master适用于我所有分支的更改进行更改;如果我然后work重新定位到master- 它已经删除了我的工作代码 -work将收到这些删除。

我怎样才能分支masterwork,删除与工作相关的更改master,然后work重新回到我清理master的而不删除所有与工作相关的代码work

从一开始,我就可以使用git rebase --interactive和拆分我所有的工作变更,但这对于一个并不常见的动作来说似乎很乏味。

我看到了git rebase --ontogit filter-branch但从我读到的内容来看,这些看起来都不是正确的方法。

4

1 回答 1

1

如何将 master 分支到工作中,删除 master 上与工作相关的更改,然后将工作重新定位到我清理过的 master 上,而不删除工作中所有与工作相关的代码?

对 master 的变基将使用... rebase --onto

git rebase --onto master $(git merge-base master work) work

这将在已清理的 master 之上重播您的提交

  git merge-base master work
      |
m--m--m--M       (master, cleaned-up)
       \
        w--w--w  (work)

    git rebase --onto master $(git merge-base master work) work

m--m--m--M            (master, cleaned-up)
          \
           w'--w'--w' (work, rebased)

于 2021-07-25T01:11:17.687 回答