Git:在分支之间移动更改而不更改工作目录
用例:每次我想将提交从一个git分支移动到另一个git分支时,我都会执行以下操作序列:Git:在分支之间移动更改而不更改工作目录,git,cherry-pick,git-checkout,Git,Cherry Pick,Git Checkout,用例:每次我想将提交从一个git分支移动到另一个git分支时,我都会执行以下操作序列: [投入工作部门] git签出要合并到的分支 git cherry picktarget提交 git推送 git签出工作分支 只有一个例外——每次我执行“git checkout”时,git工作目录内容都会发生更改(预期),这会导致我的IDE(IntelliJ IDEA)执行内部状态更新(因为受监视的文件系统子树在外部被修改)。这真的很烦人,尤其是在大量小提交的情况下 我认为有两条路要走: 执行“批量挑选”,即
git签出
要合并到的分支git cherry pick
target提交git推送
git签出
工作分支问题:是否可以执行上述操作?如果您不需要经常合并更改,而不是执行
樱桃选择,那么偶尔从
执行一次git合并如何?如果我没有弄错的话,这将相当于对自上次合并以来的所有更改进行彻底的修改(使用这种方法不会忘记提交)。这样,“编辑器问题”就不会经常发生。不,如果不更改工作目录,就不可能在分支之间移动提交。这是因为您最终会遇到冲突,此时git会暂停以修复冲突。如果您的工作不直接表示该状态,那么您将无法正确修复冲突
如果你环顾四周,你会发现很多其他可能的解决方案,但是潜在的问题听起来像是你的编辑器没有处理从它下面更改出来的文件。这基本上是使用git的一个事实。因此,要么更新编辑器,要么移动到更适合git工作流的地方。一个选项是使用。例如,您可以:
worktree_dir=$(mktemp -d)
git worktree add "$worktree_dir" branch-to-merge-into
git -C "$worktree_dir" cherry-pick target-commit
git -C "$worktree_dir" push
git worktree remove "$worktree_dir"
只要没有其他工作树已签出要合并到的分支
,这应该可以在不中断本地签出的情况下工作。选项3:指示编辑器停止妨碍您。您希望如何使用不反映外部文件更改的编辑器?您应该将标题更改为实际问题重复:您认为当前标题不反映实际问题吗?前面提到的线程针对另一个问题感谢您的建议,但据我所知,合并不仅会带来我的提交,而且会带来分支之间的所有提交。也就是说,我和我的同事执行的提交数量,我只想将我的目标提交移动到另一个分支。@denis.zhdanov:我现在知道您需要什么了。我不知道如何自动选择您的提交…您是对的,可能会发生冲突。然而,git无论如何都可以尝试这样做,如果发生冲突,它会拒绝并告诉您签出要合并到的分支。这将允许你做你大部分时间要求的事情。听起来是个不错的功能要求。