ChatGPT解决这个技术问题 Extra ChatGPT

是否可以同时查看同一个项目的多个 git 分支?

我有 2 个分支,尚未准备好合并,但有一些补充逻辑,我想回顾一下(合并之前)

我可以查看同一个项目的多个 git 分支吗?可能吗?

您将能够使用 Git 2.5+ 及其新的 git checkout --to=<path> 命令执行此操作。请参阅my answer below
实际语法是 git worktree add <path>。我已更新 my answer below

u
user229044

您可以简单地将存储库复制到一个新位置(通过逐字复制目录或使用 git clone --shared)并在每个位置签出一个分支。

您还可以使用 git-worktree 从存储库的单个实例创建多个工作目录。

否则,在合并之前比较分支之间的文件的主要方法是 git diff


C
Community

在 Git 2.5+(2015 年第 2 季度)中,Git 存储库将支持 多个工作树git worktree add <path>(这将取代 contrib/workdir/git-new-workdir

那些“链接”的工作树实际上记录在主 repo new $GIT_DIR/worktrees 文件夹中(以便在任何操作系统上工作,包括 Windows)。

在“Multiple working directories with Git?”查看更多信息


请注意,与 git-new-workdir 不同,git worktree 不允许您为同一个分支创建多个工作树:/
@NikiC 您可以根据 the doc 添加 --force 标志(-f 也可以)
这里只是一些元信息:只有一个工作树有一个包含所有对象(blob、提交、树)的.git 目录。所有其他工作树都有一个 .git file,其中包含以下内容:gitdir: /path/to/project/.git/worktrees/main(main 是我给工作树起的名称),即它指向您的基础工作树
@Honey 真的。我有documented here git worktree 如何提出一组命令来管理这些工作树(moveprunelist、...)——
C
Community

是的,在适当的照顾下是可能的。但是,您正在使用 --work-tree=<path> 选项从常规 git 目录中“带走”一份副本,因此除非您特别告知,否则 git 不会看到其中的更改。我在这里举了一个例子 single-working-branch-with-git - 请参阅 UPDATED 段。

请注意,git-new-workdir 不适用于 Windows XP,因为它需要 Unix 样式的链接。


M
Munhitsu

我想到的第一件事是在单独的项目中检查每个分支。所以: 1. 在主克隆 (1) 上签出分支 A 2. 创建新克隆 (2) 3. 在克隆 2 中签出分支 B

第二种方法可能是创建一个新分支(又名 C)并将分支 A 和 B 合并到它。如果它们是免费的,那么这可能有助于您的评论。


我已经尝试过这样做,但是当我在我的 intellij 的一个 repo 中检查分支时,其他具有克隆的 intellij 也会受到影响。对此有什么想法吗?
k
kto

如前所述,您可以使用 git diff 区分分支:

git diff [--options] <commit> [--] [<path>…]

This form is to view the changes you have in your working tree relative to the named <commit>. You can use HEAD to compare it with the latest commit, or a branch name to compare with the tip of a different branch.

上面的摘录来自 Git 文档。


m
memeplex

现在 git 包含命令 worktree 来执行此操作。