Git:在解决冲突时更改分支(stash无效)

4
git version 2.6.3.windows.1

我有一个需要进行的“拉取请求”。 因此,我切换到一个新分支(“pull_feature_branch”)。进行了“拉取请求”,但出现了许多冲突。
没问题-我只需要时间来解决它们,应该需要几天时间。
但突然间我发现了一个必须要处理的主干bug。但是我无法从我的“pull_feature_branch”分支切换到主干分支。
通常我会在其他分支中“存储”未提交的更改,这样就可以切换到主干分支来修复bug。
但现在“存储”不起作用了。
fatal: git-write-tree: error building trees
Cannot save the current index state

我需要一种方法来停止我的冲突过程,修复错误,然后返回解决冲突。

现在我知道我可以通过创建另一个项目文件夹(通过克隆项目或使用worktree命令-请参见CodeWizard的答案)来“有点”解决它(避免是更合适的词)。并且使用一个文件夹来解决冲突,另一个文件夹来解决错误。

我正在寻找一种能够在同一个文件夹内更改分支的方法。

总结一下:我做了一个pull请求,导致许多冲突,现在我被“卡住”在当前冲突分支中,无法更改分支。


完全避免问题有什么问题吗? - jthill
@jthill 猴子补丁(Monkey Patch)也是在避免问题。 它为我创建了另一个文件夹,我更喜欢不添加另一个文件夹。如果我每次都加一个文件夹,我会迷失对它们的掌握 - 这就是为什么我想把它放在同一个文件夹中的原因。 - Roko
@jthill,当你可以创建一个新目录时,为什么需要一个切换分支的命令呢? - pqnet
1
@Roko 你计划花费数天时间来解决冲突。你担心自己可能会同时处理太多的事情,以至于无法跟踪所有文件夹。听起来你有一些工作流问题,这是没有任何 Git 技巧可以帮助解决的! - Matthew Strawbridge
@pqnet 一次只克隆一个分支其实是一种不错的工作方式,当它们很简单或时间上不重叠时,串行地重复使用工作树非常方便。克隆操作非常廉价,它们就是为此而生的。 - jthill
1个回答

3
答案非常简单。
在Git的源代码的contrib/workdir目录下,您会找到一个名为git new-workdir的git命令。
此命令允许您同时在几个分支上并行工作。该功能所做的就是创建您的git文件夹的浅层副本(在新文件夹中输入tree .git以查看它实际指向的位置),您将看到它指向原始git文件夹。
在新文件夹中,您可以创建新提交、分支等,并且您将在所有new-workdir文件夹中看到它们,因为它们共享“相同”的git存储库。
演示(Unix):
  1. add the contrib/workdir to your path
  2. set execution flags to the git-new-workdir
  3. navigate to your current git repository

    git new-workdir . my_new_path 
    cd my_new_path
    tree .git ( you should see links to the original git repository)
    git checkout -b new_branch
    git branch (your new branch is listed)
    cd original_path
    git branch (the new branch is listed but the current branch is the original branch)
    

:-)

这里是两个不同分支的截图

Git 2.5将包含一个功能,允许您拥有多个工作目录,而不需要使用此脚本(git checkout --to=$path)。


我正在使用get 2.6.3,所以我不需要那个脚本了吗? - Roko
谢谢您的回答- 如果我已经在使用一个新文件夹,我可以直接克隆整个项目,在新文件夹中完成冲突,然后合并它们。 没有不使用另一个项目文件夹来实现这个的方法吗? - Roko
不行。如果它不能工作,只需按照演示步骤操作,它就会工作。 它将允许您同时处理多个分支。 - CodeWizard
1
你也可以再次克隆它,但不必这样做,因为这就是这个功能的作用 - 保存克隆。如果你克隆,你将需要提交你的更改并拉取它们以查看两个克隆之间相同的代码,在使用工作目录时,它们共享相同的分支和代码。 - CodeWizard
在这里阅读更多相关内容: https://github.com/blog/2042-git-2-5-including-multiple-worktrees-and-triangular-workflows - CodeWizard
虽然这个答案很有帮助,但我的愿望不是创建另一个文件夹,并且有两个不同的文件夹,一个负责每个分支 - 我会更新我的问题。 - Roko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接