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 分支并开始在另一个分支上工作的更好方法的主要内容,如果未能解决你的问题,请参考以下文章