移动到 GIT 中的旧分支时如何使用当前工作副本?

How to work with current working copy when moving to old branch in GIT?

我有一个关于 GIT 中最佳实践的问题。想象一下,我创建了一个名为 hotfixes 的分支,并向其添加了一些修复程序,然后将该分支与主分支合并。然后我创建了一些其他分支并将它们与主分支合并。

几周后,我意识到我需要添加更多的修补程序,所以我在本地移动到 hotfixes 分支。然而,由于 master 分支在过去几周内继续进行,我切换到一个较旧的分支,我现在最终拥有一个更旧的本地工作副本。

我如何确保能够在我几周前创建的分支中工作,并且仍然拥有与 master 中相同的当前工作目录?这是使用 rebase 命令完成的还是我必须删除旧分支并重新创建它?

我不知道具体的约定是什么,但如果主版本有重大变化,我倾向于重新合并和分支。这基本上允许我更新分支版本。我倾向于这样做,因为如果有更新被主版本接受,那通常意味着它们正在运行更新。 另一件可能的事情是复制你所做的更改,并在你从更新的主版本创建分支时更改这些文件。

希望这对您有所帮助,也很想知道其他人的建议。 祝你有美好的一天!

The problem is I would like to always use the same branch or at least the same name "hotfixes"

但是为什么呢?我建议创建一个与修复直接相关的分支,即 hotfix/missing_dll,将其从当前工作分支(例如 master)分支出来,并在合并后将其删除。这可确保您始终了解当前工作的最新情况。

如果你真的连续使用一个分支,你可以在每次重新开始工作时将当前的master合并到hotfixes .但是,这将创建丑陋的合并提交,最终将在您的 master 分支中结束。

第一个方法更清晰,更不容易出错。如果您有充分的理由继续使用单个 hotfixes 分支,请详细说明。

编辑:除了其他工作流程,这是在 this 分支模型中完成的。

无论您做什么,重新使用旧的修补程序分支(通过合并或变基)在任何合理的工作流程中都是根本错误的。修补程序分支就像功能分支——您也不会重复使用它们。

完成修补程序并将其合并回主分支后,您只需删除修补程序分支即可。当您创建新的(来自 master)时,稍后,一切都会好起来的。

顺便说一下,删除 git 中的合并分支根本不会改变历史记录。 git 中的分支只是 "sticky notes" 指向提交。例如,gitkgit log --graph --decorate master 仍将无限期地显示实际的分支提交。实际上完全不可能删除在 git checkout -bgit merge.

之间进行的 提交

手册对此进行了详细介绍:https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell