Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:在分支之间移动更改而不更改工作目录_Git_Cherry Pick_Git Checkout - Fatal编程技术网

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分支时,我都会执行以下操作序列:

  • [投入工作部门]
  • git签出
    要合并到的分支
  • git cherry pick
    target提交
  • git推送
  • git签出
    工作分支
  • 只有一个例外——每次我执行“git checkout”时,git工作目录内容都会发生更改(预期),这会导致我的IDE(IntelliJ IDEA)执行内部状态更新(因为受监视的文件系统子树在外部被修改)。这真的很烦人,尤其是在大量小提交的情况下

    我认为有两条路要走:

  • 执行“批量挑选”,即执行大量提交;比如,在工作日结束时,将他们转移到另一家分行
  • 拥有第二个本地git存储库并对其执行cherry pick,即每次对工作分支执行实际提交和推送时,转到第二个存储库,拉取更改并在那里执行cherry pick 我不喜欢第一种方法,因为它可能会忘记移动特定的提交。第二个看起来有点。。。不自然

    基本上,如果我可以说git‘将此提交从名为branchX的分支移到branchX+1的分支’,而无需工作目录更新,那将是完美的


    问题:是否可以执行上述操作?

    如果您不需要经常合并更改,而不是执行
    樱桃选择
    ,那么偶尔从
    执行一次
    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无论如何都可以尝试这样做,如果发生冲突,它会拒绝并告诉您签出要合并到的分支。这将允许你做你大部分时间要求的事情。听起来是个不错的功能要求。