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

时间:2016-10-26 04:01:26

标签: git

是否有一种简单的方法可以在没有合并或rebase的情况下从另一个分支获取更改。并将这些更改保留为未跟踪(对于新文件)或不进行提交(对于现有文件)?

6 个答案:

答案 0 :(得分:12)

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

-n标志的文档:

  

-n

     

- 没有提交

     

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

     

当连续多次提交对索引的效果时,这非常有用。

答案 1 :(得分:7)

进行合并以获得更改然后取消合并但继续修改:

git merge feature
git reset HEAD~1

答案 2 :(得分:2)

这要求您的工作树是干净的(没有HEAD提交的修改) 1

git cherry-pick <commit>
git reset --soft HEAD~1
git reset .

如果存在提交保持新文件未跟踪且现有文件未分级,则将更改从另一个分支应用于当前分支。

如果您有兴趣知道如何将更改从另一个存储库中的另一个分支应用到当前存储库。这可以here完成。

  1. https://git-scm.com/docs/git-cherry-pick

答案 3 :(得分:1)

要在没有合并的情况下获取更改,您可以使用:

git fetch

获取更改without changing your current branch.

答案 4 :(得分:1)

您可以使用git diff <another-branch> ^HEAD打印当前分支(HEAD)中“另一个分支”中更改的差异,而不是。然后将这些更改传递给git apply -,将其应用于当前索引。

git diff <another-branch> ^HEAD | git apply -

答案 5 :(得分:0)

从当前分支中签出,然后从另一个分支中提取。这会将所有提交从另一个分支拉到当前分支。您可以处理所有更改,而无需将更改提交到实际分支。 (可选)您可以提交和推送是否需要跟踪这些更改。

req.body.something

app.get('/user/:id', function(req, res) {
  res.send('user ' + req.body.id);
});

git checkout <current branch>
git pull origin <another branch>