一个分支的多个功能 - 重点是什么?

时间:2013-08-02 10:22:55

标签: git branch git-flow git-checkout atlassian-sourcetree

在SourceTree上,我有一个名为“develop”的分支。我使用SourceTree Git Flow从“开发”分支创建一个新功能。我对功能分支进行了更改,然后完成功能,更改将返回到我的“开发”分支。

然后我将这些更改推送到遥控器。

现在,这就是我想要做的事情。我不得不同时处理两个JIRA任务。所以我从“develop”分支创建了两个功能分支:“develop / feature1”和“develop / feature2”。在SourceTree上选中时,我可以通过双击它们来切换功能。然后,我可以检查两个功能分支的工作副本,但我注意到我添加到其中的文件也被添加到另一个。

我的问题是:

  1. 当我将文件添加到一个功能的工作副本时,为什么它们出现在另一个功能的工作副本中?

  2. 如果功能分支无法彼此隔离,那么有什么意义呢?

2 个答案:

答案 0 :(得分:10)

即使您当前分支中有未提交的更改,

git也允许您切换分支。文件保持未提交状态,如果需要,您可以在另一个分支中提交它们。如果您意识到自己已经完成feature/feature1的{​​{1}}工作,那就太棒了。

提交更改后,他们不再在分支之间切换。然后,您可以合并或樱桃选择分支之间的更改。

请注意,如果您有未提交的更改导致您要切换到的分支中发生合并冲突,feature/feature2将不允许您切换分支,并且即使您的某个更改位于已经存在的文件中,也可能在要切换到的分支中更改并提交。在这种情况下,您需要先提交,还原或存储更改。

如果git不允许您切换分支,并且您尝试通过在切换分支之前存储更改来解决此问题,则应确保将st存储在原始分支中。如果您在git,隐藏更改,然后切换到feature/feature1并在那里隐藏弹出,松散feature/feature2但不在feature/feature2中的更改{1}}。这很难被发现。

答案 1 :(得分:3)

在执行git add之前,git不会跟踪新文件和更改。这意味着git没有这些数据的副本,因此如果要在签出其他分支时还原您的更改,则之后将无法恢复它们。

您可以使用git status查看哪些文件已编入索引已修改未跟踪的列表。

解决此问题的唯一方法是使用git跟踪您的更改,方法是添加和提交更改(稍后可以使用git reset撤消),或者使用git stash -u <存储它们sup> 1 (稍后可以使用git stash pop撤消。)

以这种方式工作的优势在于,您可以在不考虑分支的情况下处理您想要的任何事情。在提交时,您只需签出相关分支并使用git add添加所需文件,或仅使用git add -p添加所需文件的部分


1:-u--include-untracked的简写,其中包括新创建的文件但未忽略的文件