为什么我必须在切换分支之前隐藏/提交我的更改?

时间:2013-11-05 16:30:15

标签: git

我发现这很烦人,因为我想快速切换分支并做一些事情,然后切换回我以前的工作。我意识到我可以藏匿然后检索藏匿,但是每次我都要输入这些行:/

有什么方法可以避免这样做吗?

我也觉得很烦人,因为我保留了大约5到10个功能分支,很难管理哪些功能区需要检索哪些存储区以及哪些功能区可以保持原样。

5 个答案:

答案 0 :(得分:4)

使这更容易的一种方法是使用Legit之类的东西。我喜欢Legit的其中一个命令是git switch

$ git switch <branch>
# Switches to branch. Stashes and restores unstaged changes.

Legit使用遵循特定命名约定的描述存储存储。这样,当您使用git switch返回第一个分支时,它可以自动解除为该分支保存的更改。

答案 1 :(得分:2)

您可以使用git checkout的{​​{1}}(--merge)选项 使用它会导致在切换分支时完成三向合并。如果发生这些冲突,您可能需要解决合并冲突。

至于为什么会发生这种情况,手册说明

  

切换分支时,如果您对一个或那个进行了本地修改   更多当前分支和。之间不同的文件   您要切换的分支,命令拒绝切换   分支,以保持您在上下文中的修改。

有关详细信息,请参阅git checkout manual page

答案 2 :(得分:0)

您可以使用 git stash 来隐藏更改。然后你可以更改分支,然后恢复分支并恢复你的更改:

$ git stash
$ git checkout other_branch
$ git checkout original_branch
$ git stash pop

答案 3 :(得分:0)

这实际上是您的一个问题的解决方案,但您可以向每个存储添加消息,以便知道哪个存储属于哪个分支。这样做,你将总是很容易知道哪些分支有藏匿,哪些不藏。

为此,只需使用此命令:

git stash save -u branch1

其中'branch1'是您为藏匿处提供的消息或名称

答案 4 :(得分:0)

我发现自己每天都在同一个场景中:

<块引用>

我保留了大约 5 或 10 个功能分支,很难管理哪些具有需要检索的存储以及哪些可以继续工作。

对我来说,最有效的解决方案也是最简单的(并在问题标题中提到):

提交正在进行的更改!

我总是用大写字母写我的真实提交(在 this popular standard 之后),并且我所有正在进行的提交都以小写字母开头,因此它们会立即突出显示需要在我推送之前进行交互式 rebase。因此,如果我需要切换分支以帮助某人解决某些问题,我将简单地提交所有更改并使用提交消息,例如:

<块引用>

wip:新 CoolFeature API 的草稿

顺便说一句,如果我也离开去喝咖啡,即使我不打算更换分支,我也可能会做出相同的承诺。在正常的一天中,我会提交并向自己写消息,例如:

s into abcd123: First few words of that commit
f into bcde234: First few words of that commit
wip: rough draft of this thing

下次我rebase -i时,我会按照我对自己的指示(s=squash,f=fixup)。

供读者思考的问题:

  1. 为什么我给自己的笔记有时有“s”,有时有“f”?
  2. 为什么“s”和“f”除了提交 ID 之外还包括“该提交的前几个词”?

答案:

1. 如果我使用“s”,这意味着我不仅要压缩,还要根据我添加到该提交的更改修改提交消息。 “f”表示修复意味着提交消息就足够了。

2. 我会定期做一个分支变基,以使我的分支与我将合并回的目标保持同步。如果我碰巧在交互式 rebase 之前先这样做,我的提交 ID 会更改,但我仍然可以与提交标题匹配。