【问题标题】:Best approach to test new stuff in sources without damage anything在不损坏任何东西的情况下测试来源中的新东西的最佳方法
【发布时间】:2016-10-25 20:30:51
【问题描述】:

我在 Git 上工作了一段时间(虽然不是专家),但这个问题从来没有出现在我的脑海中,但现在正在四舍五入。

假设我有一个包含三个分支以及master 的存储库:

  • 主人
  • branch_1
  • branch_1_devel
  • branch_1_devel_test

我根本没有使用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_develbranch_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 的源中提取任何内容@

【问题讨论】:

    标签: git github


    【解决方案1】:

    如果我理解正确...如果您在branch_1_devel_test 中创建一个文件而不提交它,它将独立于分支(它不会成为回购的一部分)。这意味着当您切换回branch_1_devel 时,该文件仍将作为未跟踪文件存在。如果您在branch_1_devel_test 中提交文件,该文件将成为 repo 的一部分,并在您更改分支时消失。

    如果您想避免文件散落,您可以使用stash 机制。实际上,我不确定您是否可以存储未跟踪的文件。无论如何,你正在尝试做的事情看起来很奇怪:如果你创建了一个值得保留的文件,你应该提交它。如果以后不再需要它,则可以将其删除(当然,如果是大文件则不同...)

    【讨论】:

    • 我在某些时候遇到了一些关于 stash 的问题,所以目前,直到我感觉更舒服为止,我将使用您之前描述的方法,是的,这正是我正在寻找的答案跨度>
    • 乐于助人!
    • 还有一个问题:如果我删除分支branch_1_devel_test会发生什么?文件application/controllers/AdminconsoledemoController.php也会被删除吗?
    • 我真的不知道文件属于哪里... :) 如果它是在分支中提交的,那么是的...
    • 在分支中我会删除所以是的,好的,非常感谢
    【解决方案2】:

    您可以使用git worktree 以便在不使用comitting 或stashing 的情况下保持不同分支的开发。它允许独立地在自己的工作目录中签出分支。示例:

    git worktree add ../project-branch_1 branch_1
    

    不过,worktree 命令已在 Git 2.5 中引入,仍被认为是实验性的:

    一般来说,多重结帐仍处于试验阶段,并且支持 对于子模块是不完整的。不建议制作多个 超级项目的结帐。

    即使是子模块,我也从未遇到过问题,除了需要手动删除工作目录。其他链接:What would I use git-worktree for?github worktree notes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 2018-02-07
      • 2020-01-17
      • 1970-01-01
      相关资源
      最近更新 更多