【问题标题】:Correct Version control of dead ends正确的死角版本控制
【发布时间】:2014-10-05 04:09:31
【问题描述】:

问题

在开发实验性代码时,我有时会提交导致死胡同的更改。然后我想回滚到以前的版本,重新开始。但我不知道如何做到最好。

示例 - 问题

假设我们在分支A 中有以下结构:r1 -> r2 -> r3 -> r4 -> r5

然后我意识到,这是一条死胡同,想从r3重新开始。

示例 - 方法

在我看来,以下最终存储库结构是理想的,但如果我错了,请纠正我:

Branch A:              r1 -> r2 -> r3 -> r4_new -> ...
                                     \
Branch A_dead_end:                    `-> r4 -> r5

问题

处理死胡同回滚的最佳做法是什么?请同时更正我的措辞,因为我不知道要搜索什么术语。 我对 Git 和 SVN 的解决方案感兴趣。

【问题讨论】:

  • 旁注:在 git 中,所有的箭头都指向另一个方向。分支标签指向最新的提交,它指向每个更早的提交,直到你到达r1,它只是说“没有更早”。这是必要的,因为提交是永久不可更改的:您创建 r2 指向任何地方,但之后您永远无法更改它,因此您无法使其指向尚不存在的 r3。所以将r2指向r1,然后创建r3指向r2
  • 感谢您的信息,我不知道。但是我不确定是否有更好的显示方式。我想用一个统一的符号来表示所有版本控制系统。只是离开箭头?我认为这不是一个好主意。

标签: git svn version-control dead-code


【解决方案1】:

对于 Git:如果你还没有推送分支 A,你可以这样做:

git checkout -b A_dead_end
git branch -f A r3
git checkout A

【讨论】:

  • 谢谢,这可行,但我对这个答案并不完全满意。我对这个答案有不同的问题,我将在进一步的 cmets 中解释,以便于编辑。
  • @Waog 因为你想重置分支。这不是 hack,只是一种将主 HEAD 移回的方法。
  • 然后你可以,然后 git push --force,但是如果其他人已经克隆了你的 repo,他们就会有问题。在这种情况下,另一种方法是使用git revert,并创建一个将取消 r4 和 r5 的新提交:stackoverflow.com/a/4992711/6309
  • @Waog 是的,r1、r2、r3 仍然是分支的一部分:从主 HEAD 访问的任何提交都是主分支的一部分。另请参阅stackoverflow.com/a/2707110/6309,以及,为了正确的可视化,git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
  • @Waog 是的,r2 是两个分支的一部分,这是正常的。不,分支没有“父级”:请参阅stackoverflow.com/q/3161204/6309 中的讨论。
【解决方案2】:

对于 SVN,您至少有两种方式

  • 反向合并 r4 + r5(提交为 r6 合并集)并在同一分支中继续工作
  • 从 BranchA_dead_end@3 创建新分支并忘记原始分支(您甚至可以svn rm 它)

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 2012-09-21
    • 2014-01-17
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    相关资源
    最近更新 更多