Git 是离开 WIP 分支并开始在另一个分支上工作的更好方法

Posted

技术标签:

【中文标题】Git 是离开 WIP 分支并开始在另一个分支上工作的更好方法【英文标题】:Git a better way for leaving WIP branch and start working on a another branch 【发布时间】:2020-03-10 11:29:39 【问题描述】:

我正在开发一个分支 (feature01),它仍在进行中。现在我必须离开 WIP 分支并开始处理另一个功能/错误修复,为此,我必须从我的开发分支中创建一个新分支。我通常将所有更改存储在 feature01 中并开始在新分支上工作。我不太喜欢这个解决方案,因为我可以在新分支上工作一天左右,而且我必须记住有一些东西在藏匿处。每个分支是否有任何本地化版本的存储或类似的东西,以便我可以在不同的 WIP 分支之间移动,而不必存储一堆东西并手动跟踪它们。

我正在考虑的一个解决方案是在签出到新分支之前提交本地更改,然后在其中一个 WIP 分支上完成工作时,我可以将一些提交与更有意义的消息一起压缩,而不是而不是有一堆没有那么有用的消息的提交。

我想知道你们是否知道这个问题的更好解决方案,或者这个问题是否因为我的 git 工作流程不正确而出现。我在网上搜索了解决方案,但大多数人建议存储,当更改在存储中保留更长时间时,我不太喜欢。

干杯。 瓦卡尔

【问题讨论】:

【参考方案1】:

我建议使用临时提交:

# you have unfinished modifications to save before switching
git commit -am "temp - DO NOT PUSH"
git checkout other-branch

然后你可以在other-branch 上工作,当你完成后,很容易撤消previous-branch 上的提交,同时保留其内容

git checkout previous-branch
git reset HEAD^

当然,有别名会更容易

git config --global alias.ct 'commit -am "temp - DO NOT PUSH"'
git config --global alias.rs1 'reset HEAD^'

那么就

# to save uncommited changes ON the branch
git ct

# to "unravel" a temp commit
git rs1

【讨论】:

我会尝试并回复您。我找到了一个指向 GitFlow 的链接,基本上每个人都会做一些细微的修改,我认为它是一本不错的书。 datasift.github.io/gitflow/IntroducingGitFlow.htmlnvie.com/posts/a-successful-git-branching-model @WaqarRashid 我自己每天都在使用它,因为我也不太喜欢stash,它很快就会变得一团糟。 当我知道我不需要将更改保留更长时间时,我会使用 stash。超过30分钟,它会造成混乱。你的回答真的很有帮助。谢谢。 @WaqarRashid 不客气。看来我们基本上都将储藏室用作垃圾箱/垃圾箱:-) 如果您可以为别名添加更多解释会更好,因为在您回答之前我不知道它们的用处。它可能对其他人也有帮助,对好奇的人也有一点了解。【参考方案2】:

另一种解决方案是使用git worktree 功能在另一个文件夹中工作(但仍在同一个存储库中),而不是存储或执行临时提交。

关于该主题的博文:https://spin.atomicobject.com/2016/06/26/parallelize-development-git-worktrees/

【讨论】:

虽然这可能看起来超出了某些人的范围,但我认为这绝对是更好的答案。感谢您对 Philippe 的洞察!【参考方案3】:

Git 使用提交 ID,例如我们 521747298a3790fde1710f3aa2d03b55020575aa

此哈希码保留您代码中的所有更改。如果你想在不提交的情况下更改你的分支,根据 git 规则它是不合逻辑的。每个更改都必须使用此哈希码进行标记。要扩展,您可以选择必须推送哪些提交。

【讨论】:

感谢您的回答。我认为在签出之前进行临时提交将是最好的解决方案,因为这些临时提交可以被压缩在一起或删除。我认为@RomainValeri 的回答很好地解释了它,并且有别名可以使它更容易。

以上是关于Git 是离开 WIP 分支并开始在另一个分支上工作的更好方法的主要内容,如果未能解决你的问题,请参考以下文章

git 建立本地分支和远程分支关系

从 git 分支中删除文件但将其保留在另一个?

Git05 分支管理

Git3:Git分支

如何将本地文件夹连接到 Git 存储库并开始对分支进行更改?

git合并分支后还能在旧分支推送吗