在SourceTree上,我有一个名为“develop”的分支。我使用SourceTree Git Flow从“开发”分支创建一个新功能。我对功能分支进行了更改,然后完成功能,更改将返回到我的“开发”分支。
然后我将这些更改推送到遥控器。
现在,这就是我想要做的事情。我不得不同时处理两个JIRA任务。所以我从“develop”分支创建了两个功能分支:“develop / feature1”和“develop / feature2”。在SourceTree上选中时,我可以通过双击它们来切换功能。然后,我可以检查两个功能分支的工作副本,但我注意到我添加到其中的文件也被添加到另一个。
我的问题是:
当我将文件添加到一个功能的工作副本时,为什么它们出现在另一个功能的工作副本中?
如果功能分支无法彼此隔离,那么有什么意义呢?
答案 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
的简写,其中包括新创建的文件但未忽略的文件