ChatGPT解决这个技术问题 Extra ChatGPT

Is it possible to view multiple git branches at the same time for the same project?

I have 2 branches, which are not ready to be merged yet, but have some complementary logic, which I'd like to review (before merging)

Can I check out multiple git branches of the same project? Is it possible?

You will be able to do so with Git 2.5+ and its new git checkout --to=<path> command. See my answer below.
The actual syntax is git worktree add <path>. I have updated my answer below.

u
user229044

You can simply copy the repository to a new location (either by literally copying the directory, or using git clone --shared) and check out one branch per location.

You can also use git-worktree for creating multiple working directories from a single instance of a repository.

Otherwise, the primary means for comparing files between branches prior to merging them is git diff.


C
Community

With Git 2.5+ (Q2 2015), a Git repo will support multiple working trees with git worktree add <path> (and that will replace contrib/workdir/git-new-workdir)

Those "linked" working trees are actually recorded in the main repo new $GIT_DIR/worktrees folder (so that work on any OS, including Windows).

See more at "Multiple working directories with Git?"


Note that unlike git-new-workdir, git worktree does not allow you to create multiple worktrees for the same branch :/
@NikiC You can by adding the --force flag (-f also works) according to the doc
Just a little meta info here: only one of the worktrees has a .git directory that contains all the objects (blobs, commits, trees). All other worktrees have a .git file that contains something like: gitdir: /path/to/project/.git/worktrees/main (main is a name I gave to my worktree) i.e. it points back to your base worktree
@Honey True. And I have documented here how git worktree proposes a set of commands to manage those worktrees (move, prune, list, ...) –
C
Community

Yes it is possible with appropriate care. However you are taking one of the copies 'away' from the regular git directory using --work-tree=<path> option, so changes there won't be seen by git unless you specially tell it. I gave an example here single-working-branch-with-git - see the UPDATED segment.

Note that the git-new-workdir doesn't work on Windows XP as it requires Unix style links.


M
Munhitsu

First thing that comes to my mind it to checkout each branch on separate project. So: 1. checkout branch A on primary clone (1) 2. create a new clone (2) 3. checkout branch B in clone 2

Second approach could be to create a new branch (aka C) and merge both branch A and B to it. If they are complimentary than this might help with your review.


I have tried doing this but when I check out the branch in one repo in my intellij other intellij having clone also gets impacted .any idea about that?
k
kto

As already mentioned, you can diff branches with 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.

Excerpt above is from Git documentation.


m
memeplex

Now git includes the command worktree to do exactly that.