我和Git工作了一段时间(虽然不是专家)但这个问题从未出现在我的脑海中,但现在正在四处寻找。
我们说我有一个包含三个分支的存储库加上master
:
我根本没有使用master
,因此branch_1
变得像master
一样。通常我应该在branch_1_devel
进行新的开发,然后在准备好branch_1
时将这些更改合并。
现在我想测试一个新功能,所以我创建了一个新的分支branch_1_devel_test
。签出到该分支后,我在名为file1
的文件中进行了更改。
需要在branch_1_devel
中完成具有更高优先级的内容,因此我需要签出该分支并编辑相同的file1
。完成所有操作后,我添加了文件,提交更改,然后合并到branch_1
。
然后我回到branch_1_devel_test
,因为我想继续测试我在file1
离开的位置。
有这个场景(如果你不明白让我知道,我会试着更清楚)几个问题:
branch_1_devel
提取更改将file1
发生冲突?这意味着我将失去以前的变化吗?branch_1_devel_test
所做的更改?如果我尝试在新分支中签出而没有在当前的更改中提交更改,那么意义将是一个问题吗?所有这一切背后的全部理念是:我想测试一些内容,但我不想将更改推送到branch_1_devel
branch_1
。
更新
这是我为了解Git的行为而进行的一项小测试。
$ git branch
master
branch_1
* branch_1_devel
$ git checkout -b branch_1_devel_test
Switched to a new branch 'branch1_devel_test'
$ git branch
master
branch_1
branch_1_devel
* branch_1_devel_test
现在我在branch_1_devel_test
,所以我创建了一个新的空文件
$ git status
# On branch branch_1_devel_test
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# application/controllers/AdminconsoledemoController.php
#
nothing added to commit but untracked files present (use "git add" to track)
切换回branch_1_devel
$ git checkout branch_1_devel
Switched to branch 'branch_1_devel'
$ git status
# On branch branch_1_devel
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# application/controllers/AdminconsoledemoController.php
#
nothing added to commit but untracked files present (use "git add" to track)
为什么branch_1_devel_test
处正在跟踪branch_1_devel
处创建的文件?这正是我试图避免的原因,因为我需要在从branch_1_devel
答案 0 :(得分:1)
如果我理解正确...如果您在branch_1_devel_test
中创建文件而未提交,则它将独立于分支(它不会是回购的一部分)。这意味着当您切换回branch_1_devel
时,文件仍将作为未跟踪文件存在。如果您在branch_1_devel_test
中提交文件,则该文件将成为回购的一部分,并且在您更改分支时将会消失。
如果您想避免放置文件,可以使用stash
机制。实际上,我不确定你是否可以存储未经跟踪的文件。无论如何,你要做的事情看起来很奇怪:如果你创建一个值得保留的文件,你应该提交它。如果那时,将来你不再需要它了,你可以删除它(当然,如果它是一个大文件,那么事情会有所不同......)
答案 1 :(得分:1)
您可以使用git worktree
,以便在没有comit
或stash
的情况下将开发保留在不同的分支中。它允许独立地检查自己工作目录中的分支。例如:
git worktree add ../project-branch_1 branch_1
然而,在Git 2.5中引入了worktree
命令,仍然被认为是实验性的:
一般多次结账仍是实验性的,并且支持 子模块不完整。不建议制作多个 结帐超级项目。
即使使用子模块,我也从未遇到过问题,除非需要手动删除工作目录。其他链接:What would I use git-worktree for?,github worktree notes。