Git:在分支之间移动更改而不更改工作目录

den*_*nov 15 git cherry-pick git-checkout

用例:每次我想将提交从一个git分支移动到另一个git分支时,我执行以下操作序列:

  1. [进入工作分支]
  2. git checkout 分支到上合并成
  3. git cherry-pick 针对提交
  4. git push
  5. git checkout 工作分支

这是唯一的例外 - 每次我执行'git checkout'时,git工作目录内容被更改(预期)并导致我的IDE(IntelliJ IDEA)执行内部状态更新(因为受监视的文件系统子树被外部修改) ).这真的很烦人,特别是在大量小提交的情况下.

我看到两种方法:

  1. 执行'大规模樱桃选择',即执行大量提交; 比如,在工作日结束时将他们转移到另一个分支;
  2. 拥有第二个本地git存储库并对其执行cherry picks,即每次对工作分支执行实际提交和推送,转到第二个存储库,提取更改并在那里执行cherry pick;

我不喜欢第一种方法,因为它可能会忘记移动特定的提交.第二个看起来有点......不自然.

基本上,如果我能说git'将这个提交从名为branchX的分支移动到分支branchX + 1'而没有工作目录更新,那将是完美的.

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

cmc*_*nty 8

不,在不更改工作目录的情况下,无法在分支之间移动提交.这是因为你最终会遇到冲突,此时git会暂停,这样你就可以解决冲突.如果您的工作直接不代表该状态,那么您将无法正确修复冲突.

如果你环顾四周,你会发现很多其他可能的解决方案来解决这个问题,但是潜在的问题听起来就像你的编辑器没有处理从它下面改变的文件.这基本上是使用git的一个事实.因此,要么更新编辑器,要么转移到更适合git工作流程的东西.

  • 你是对的,_可能_发生冲突。然而,无论如何,git 都可以尝试这样做,如果发生冲突,它会拒绝并告诉你签出要合并的分支。这将允许做您大多数时候要求的事情。听起来是一个很好的功能请求。 (2认同)

Eri*_*got 1

如果您不需要经常合并更改,那么不做cherry-pick,那么偶尔从git merge <working branch>您的 中做一次怎么样<branch to merge into>?如果我没有记错的话,这相当于对自上次合并以来的所有更改进行樱桃腌制(使用这种方法不会有忘记提交的风险)。这样,“编辑器问题”就会减少发生。