从另一个分支获取更改,而不会影响当前分支

And*_*iad 9 git

是否有一种简单的方法可以从另一个分支获取更改而无需合并或重组.并保持这些更改未跟踪(对于新文件)或不进行提交(对于现有文件)?

161*_*903 15

你可以用git cherry-pick -n <commit>....它从一个或多个提交中获取更改,并将它们应用于当前工作树而不进行提交.

-n标志文件:

-n

--no提交

通常,该命令会自动创建一系列提交.此标志应用必要的更改来挑选您的工作树和索引的每个命名提交,而不进行任何提交.此外,使用此选项时,索引不必与HEAD提交匹配.樱桃选择是针对索引的开始状态完成的.

当在一行中挑选多个提交效果时,这非常有用.


Ôre*_*rel 12

进行合并以获取更改,然后取消合并但保留修改:

git merge feature
git reset HEAD~1
Run Code Online (Sandbox Code Playgroud)

  • 我认为这实际上是最好的答案。功能分支通常有很多自己的提交,因此,除非先将其压扁,否则不能使用“ cherry-pick”来实现 (4认同)
  • 最佳答案!如果在执行“git merge feature”时遇到“Git refusing to merge unrelated histories on rebase”,那么请执行“git merge feature ----allow-unrelated-histories” (2认同)

kta*_*lyn 12

签出您想要放置未提交更改的新分支。

git merge --squash sourcebranch

其工作原理与已接受的答案类似,但只有一行。

https://blog.oddbit.com/post/2019-06-17-avoid-rebase-hell-squashing-wi/


nja*_*jam 8

您可以使用git diff <another-branch> ^HEAD打印“another-branch”中但不在当前分支(HEAD)中的更改的差异。然后通过将这些更改传递给git apply -.

git diff <another-branch> ^HEAD | git apply -
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个解决方案不触及索引。 (3认同)