Git:将提交发送到另一个分支,这样我就可以工作并合并回来,而不必(非常慢)签出?

Git:将提交发送到另一个分支,这样我就可以工作并合并回来,而不必(非常慢)签出?,git,git-branch,branching-and-merging,Git,Git Branch,Branching And Merging,我有两个分支,一个是main分支,另一个是我正在开发的并行版本 A --> B --> C (master) \ -> E --> F (parallel) 并行分支将始终从主合并。总是。并对其进行修改 A --> B --> C --> D --> H (master) \ \ *merge* -> E --> F --> G --> J (parallel) 如果我切换分支

我有两个分支,一个是
main
分支,另一个是我正在开发的
并行版本

A --> B --> C (master)
  \
   -> E --> F (parallel)
并行
分支将始终从
合并。总是。并对其进行修改

A --> B --> C --> D --> H  (master)
  \           \ *merge*
   -> E --> F --> G --> J  (parallel)
如果我切换分支,这很容易做到

但是,如果我正在使用并行
,我可以在不切换分支的情况下执行此操作吗?切换的问题是来回切换要花费很长时间


假设我在
F
,而master仍然在
A
。然后我想对master
B
C
进行一些提交,然后将它们合并到
G
。在不切换分支的情况下,我又该如何做呢?

您想要的可能是使用低级(管道)Git命令和单独的工作树和索引来实现的

如中所述,通过使用环境变量,可以为给定的Git存储库创建单独的工作树,基本上:

$ mkdir foo && cd $_
$ export GIT_DIR=/path/to/the/repo/.git
$ export GIT_INDEX_FILE="$(pwd)/.index"
$ git read-tree master
$ git checkout-index -a -u
现在更新工作树中的文件并进行阶段性更改(
git add
etc),然后

$editor/tmp/COMMIT\u MSG

$git update ref refs/heads/master$(git commit tree$(git write tree)-p$(git rev parse master)要在两个分支上同时工作,请在并行克隆之间推送

# one-time setup: 
new=parallel-master
git clone . ../$new -b master
git remote add $new ../$new
切换到主机:

cd ../parallel-master
# work work commit commit lalala
切换回:

git push origin master
cd ../main
这就是所需要的,
git merge
正常工作。如果你想从并行合并到主控,只需在切换前按另一种方式,两种方式都是一样的。

现在有一种更简单的解决方案,利用
git worktree
:你会得到更多的工作树(即签出)它们共享相同的存储库数据

主页说明:

git存储库可以支持多个工作树,允许您一次签出多个分支

这意味着您不需要切换分支,只需在将活动从
master
切换到
parallel
时更改目录即可,反之亦然。 因为没有额外的(克隆的)存储库,所以在管理它时没有像推送、合并或获取操作那样的开销,也没有配置方面的麻烦

为分支
并行
添加额外的工作树:

git worktree add path/to/new-worktree parallel

你打算如何在
master
上提交而不切换到它?@NeilForrester这是我的问题。你是什么意思?!那么,我认为在一个存储库中不可能做到这一点。尝试创建两个存储库,并在每个分支上保留一个。除此之外,你自己决定。那么,我可以在同一个存储库中创建两个存储库吗文件夹?你会不会把这些问题作为一个详细的答案“NeIfFrrestsPrimeC++”发布?在文件时间戳被触摸时花很长时间来重建一个项目是一个C++问题。Git签出会触及文件时间戳。哇,我需要一些时间来测试所有这些!谢谢。把你的裤子放在那里,我下周就回来。喜欢用简单的方法来解决明显复杂的问题!太棒了@doak我想你是想用这句话通知我的。。。只是想让你知道你只通知了jthill。这是一个很好的副作用好久不知道了,不过听起来确实好多了;P
git worktree add path/to/new-worktree parallel