Git:在解决冲突的过程中更改分支(stash 不起作用)

标签 git

git version 2.6.3.windows.1

我有一个 pull request我需要做。
所以我 checkout 到一个新的分支( pull_feature_branch )。 pull请求,在 中得到解决许多 冲突。

没问题 - 我只需要时间来修复它们,应该花我几天时间。

但是突然我发现了一个我必须注意的错误 - 在主分支中。
但是我无法从我的 pull_feature_branch 分支 checkout 到我的主分支。

通常我会将我未提交的更改 stash 在其他分支中 - 这允许我 checkout 到主分支以修复错误。

但是现在 stash 不起作用-
fatal: git-write-tree: error building trees
Cannot save the current index state

必须有办法让我停止我的冲突过程,修复错误,然后返回修复冲突。

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

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

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

最佳答案

答案很简单。

contrib/workdir在 Git 的源代码目录下,你会发现一个名为 git new-workdir 的 git 命令.

此命令允许您并排在多个分支上同时工作。
该函数所做的只是创建 git 的浅拷贝。文件夹(在新文件夹中键入 tree .git 以查看它实际指向的位置),您将看到它指向原始 git 文件夹。
在新文件夹中,您可以创建新的提交、分支等,并且您将在所有 new-workdir 中看到它。文件夹,因为它们共享“相同”的 git 存储库。

演示:(Unix)

  • 添加 contrib/workdir到您的道路
  • 将执行标志设置为 git-new-workdir
  • 导航到您当前的 git 存储库
    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)
    

  • :-)

    Here is a screenshot of the 2 diffent branches

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

    关于Git:在解决冲突的过程中更改分支(stash 不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34533187/

    相关文章:

    git - 无法在 Mac M1 Monterrey 上使用不同的 ssh key 管理多个 github 存储库

    git - VS 2010、Git 和具有多个项目的解决方案

    git - 切换分支时git是否更改子模块引用

    git - 在 Visual Studio Code 中设置自定义 git diff 命令 (--word-diff)

    php - "git pull"外部世界不工作

    git - 从 Git 存储库中删除多个已从磁盘中删除的文件

    node.js - 预发布未按预期工作

    git - 还原推送的 merge 后无法将主分支 merge 到功能分支

    git - 如何在 git 中查找修改过的文件,即使有还原的提交?

    git - 如何更改 Git 日志日期格式