# 合并、变基或挑拣以应用更改

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com/zh-cn/help/idea/llms.txt).

在 Git 中，有几种方法可以将一个分支的更改合并到另一个分支中：

* [合并分支](#merge)

* [变基分支](#rebase-branch)

* [挑选单独的提交](#cherry-pick)

* [从提交中应用单独的更改](#apply-separate-changes)

* [将特定文件应用到分支](#copy-files-to-branch)

## 合并分支

假设您创建了一个功能分支来处理特定任务，并希望在完成并测试该功能后，将您的工作成果（  `F1` 、  `F2` 、  `F3` ）集成到主代码库中：

```MERMAID
gitGraph
    commit id: "C1"
    commit id: "C2"
    commit id: "C3"
    branch feature
    checkout feature
    commit id: "F1"
    commit id: "F2"
    commit id: "F3"

```

将您的分支  合并  到  `main`  是最常见的方法。

很常见的是，当您在功能分支上工作时，队友会继续将他们的工作（  `C4` 、  `C5` ）提交到  `main` ：

```MERMAID
gitGraph
    commit id: "C1"
    commit id: "C2"
    commit id: "C3"
    branch feature
    checkout feature
    commit id: "F1"
    commit id: "F2"
    commit id: "F3"
    checkout main
    commit id: "C4"
    commit id: "C5"

```

当您将功能分支 [合并](#merge-branches) 到  `main`  时，来自您的功能分支的更改会集成到目标分支的 HEAD：

```MERMAID
gitGraph
    commit id: "C1"
    commit id: "C2"
    commit id: "C3"
    branch feature
    checkout feature
    commit id: "F1"
    commit id: "F2"
    commit id: "F3"
    checkout main
    commit id: "C4"
    commit id: "C5"
    merge feature

```

Git 会创建一个称为  合并提交 的新提交，该提交是从您的功能分支和  `main` 在两条分支分叉点合并更改而产生的。

合并的主要好处是具备完整的可追溯性，因为合并到  `main`  代码库中的提交会保留其原始哈希和作者，并且属于同一功能的所有提交都可以归为一组。

这种工作流适用于向  `main`  代码库提交更改需要经过 [Pull Request](create-and-merge-github-pull-requests.html#create-pull-request) 或 [Merge Request](work-with-gitlab-merge-requests.html)，或分级审批流程的项目，因为现有分支不会以任何方式被更改。

这种方法的主要缺点是每次需要合并更改时都会创建额外的合并提交，这会严重污染项目历史，使其难以阅读。

Procedure: 合并分支

1. 在   [分支](manage-branches.html)   弹出窗口（主菜单  `Git | 分支` ）或   分支   面板的   Git   工具窗口中，选择您想要集成更改的目标分支，并从上下文菜单中选择   检出   以切换到该分支。

2. 请执行以下操作之一：

* 如果您不需要为合并指定选项，请选择您要合并到当前分支的分支，然后从子菜单中选择 将 <分支名称> 合并到 <目标分支> 。 ![合并分支](https://resources.jetbrains.com/help/img/idea/2026.3/merge_branches_popup.png)

* 如果您需要指定合并选项，请从主菜单中选择 `Git | 合并` 以打开 合并 对话框： ![合并对话框](https://resources.jetbrains.com/help/img/idea/2026.3/merge_dialog.png) 选择您想合并到当前分支的分支，点击 修改选项 并从以下选项中选择： * `--no-ff` : 无论何种情况都会创建合并提交，即使该合并可以通过快进解决。 * `--ff-only` : 仅在可以快进的情况下才会解决合并。 * `--squash` : 将在当前分支之上创建一个包含所有拉取更改的单个提交。 * `-m` ：您将可以编辑合并提交的消息。 * `--no-commit` ：将执行合并，但不会创建合并提交，以便您可以在提交之前检查合并的结果。 * `--no-verify` ：执行合并，同时绕过通常默认运行的 pre-merge 和 commit-message 钩子。 * `--allow-unrelated-histories` ：执行合并，覆盖拒绝在没有共同祖先的情况下合并历史的安全规则。

点击   合并  。

如果您的工作树是干净的（意味着没有未提交的更改），并且您的功能分支与目标分支之间没有冲突，Git 将合并这两个分支，合并提交将出现在   日志   标签页的   Git   工具窗口 `Alt+9` (Windows), `⌘ 9` (macOS), `⌘ 9` (IntelliJ IDEA Classic (macOS)), `⌘ 9` (macOS System Shortcuts), `Alt+9` (XWin), `Alt+9` (GNOME), `Alt+9` (KDE), `Alt+9` (Emacs), `Alt+9` (Sublime Text), `⌘ 9` (Sublime Text (macOS)), `Alt+9` (Visual Studio), `⌘ 9` (Visual Studio (macOS)), `Alt+9` (NetBeans), `Alt+9` (Eclipse), `⌘ 9` (Eclipse (macOS)) 中：

![合并提交](https://resources.jetbrains.com/help/img/idea/2026.3/merge_commit.png)

如果您的分支与目标分支之间发生冲突，系统会提示您解决这些冲突（请参阅 [解决冲突](resolve-conflicts.html)）。 如果合并后仍有未解决的冲突，   合并冲突   节点将出现在   提交   工具窗口 ( `Alt+0` (Windows), `⌘ 0` (macOS), `⌘ 0` (IntelliJ IDEA Classic (macOS)), `⌘ 0` (macOS System Shortcuts), `Alt+0` (XWin), `Alt+0` (GNOME), `Alt+0` (KDE), `Alt+0` (Emacs), `Alt+0` (Sublime Text), `⌘ 0` (Sublime Text (macOS)), `Alt+0` (Visual Studio), `Alt+0` (Visual Studio (macOS)), `Alt+0` (NetBeans), `Alt+0` (Eclipse), `⌘ 0` (Eclipse (macOS)) ) 中相应的更改列表内，并提供用于解决这些冲突的链接。

如果您有被合并覆盖的本地更改，IntelliJ IDEA 会建议执行   智能合并  。 如果您选择此选项，IntelliJ IDEA 将 [暂存](shelving-and-unshelving-changes.html#stash)未提交的更改，执行合并，然后取消暂存这些更改。

> **Note:**
> 可以取消未完成的  合并  操作，方法是从 VCS 微件中选择   中止   操作。

## 变基分支（git-rebase）

当您  `变基` 一个分支到另一个分支时，您将第一个分支的提交应用到第二个分支的 HEAD 提交之上。

假设您创建了一个功能分支来处理特定任务，并向该分支进行了数次提交（  `F1` 、  `F2` 、  `F3` ）：

```MERMAID
gitGraph
    commit id: "C1"
    commit id: "C2"
    commit id: "C3"
    branch feature
    checkout feature
    commit id: "F1"
    commit id: "F2"
    commit id: "F3"

```

当您在自己的分支中开发时，队友会继续将他们的工作（  `C4` 、  `C5` ）提交到  `main` ：

```MERMAID
gitGraph
    commit id: "C1"
    commit id: "C2"
    commit id: "C3"
    branch feature
    checkout feature
    commit id: "F1"
    commit id: "F2"
    commit id: "F3"
    checkout main
    commit id: "C4"
    commit id: "C5"

```

要将队友所做的更改（  `C4` 、  `C5` ）集成到您的功能分支，您可以将您的分支 [变基](#rebase-branch-onto-another-branch) 到  `main`  之上。 这样，您会将自己的提交应用到  `main`  中当前 HEAD 提交之上：

```MERMAID
gitGraph
    commit id: "C1"
    commit id: "C2"
    commit id: "C3"
    commit id: "C4"
    commit id: "C5"
    branch feature
    checkout feature
    commit id: "F1'"
    commit id: "F2'"
    commit id: "F3'"

```

变基的主要好处是，您将获得一个干净的项目历史，便于他人阅读和理解。 您的日志不包含由  `merge` 操作产生的不必要的合并提交，您将获得易于导航和搜索的线性历史记录。

不过，在决定采用此工作流时，您应牢记，  `变基`  会重写项目历史记录，因为它会为原始功能分支中的每个提交创建新的提交（  `F1'`  而非  `F1` ），因此它们将具有不同的哈希，从而妨碍可追溯性。

Procedure: 将分支变基到另一个分支之上

1. 从主菜单中选择  `Git | 变基`

![Git rebase 对话框](https://resources.jetbrains.com/help/img/idea/2026.3/git_rebase_dialog.png)

2. 从列表中选择要将当前分支变基到的目标分支:

![在 Git rebase 对话框中选择目标分支](https://resources.jetbrains.com/help/img/idea/2026.3/git_rebase_choose_target_branch_no_interactive.png)

3. 要更改当前分支的上游基线或仅将特定提交序列移动到新目标，请点击   修改选项  并选择   --onto  。

在新基线字段中，输入要为当前分支变基的分支名称或提交哈希。

在旧基线字段中，输入标记截止点的分支名称或提交哈希。 Git 会将当前分支上此基线之后的所有提交放到新基线上。

![使用 --onto 指定提交哈希](https://resources.jetbrains.com/help/img/idea/2026.3/git_rebase_specify_commit_no_interactive.png)

> **Tip:**
> 要复制提交哈希，请在   日志  中选择它，右键点击并选择   复制修订号  。

4. 如果要变基的分支当前未检出，请点击   修改选项  ，点击   选择其他分支进行变基  ，然后从出现的列表中选择一个分支:

![选择要变基的分支](https://resources.jetbrains.com/help/img/idea/2026.3/git_rebase_choose_source_branch_no_interactive.png)

IntelliJ IDEA 将在开始变基操作之前检出此分支。

5. 根据您的具体情况，从   修改选项   列表中选择其他选项：

* `--rebase-merges` ：保留将要变基的提交中的分支结构。 请注意，这些合并提交中已解决的合并冲突或手动修改需要手动重新解决或重新应用。

* `--keep-empty` ：保留空提交，即相对于其父提交没有任何更改的提交。

* `--root` ：对分支中可到达的所有提交执行变基。

* `--update-refs` ：自动强制更新指向正在变基的提交的任何分支。

* `--autosquash` ：自动压缩标记为 fixup 或 squash 的提交。

> **Tip:**
> 有关这些选项的更多信息，请参阅 [git-rebase](https://git-scm.com/docs/git-rebase)

6. 点击   变基  。

> **Note:**
> 可以取消未完成的  变基  操作，或恢复中断的变基，方法是分别从 VCS 微件顶部选择   中止   或   继续   操作。

如果您不需要为 rebase 指定选项，您可以在不调用 rebase 对话框的情况下启动 rebase。 在   分支  弹出窗口或 [分支窗格](log-tab.html#branches_pane_context_menu)中的 [Git](version-control-tool-window.html)工具窗口中选择一个分支并执行以下操作之一：

![变基选项](https://resources.jetbrains.com/help/img/idea/2026.3/rebase_options.png)

* 检出并变基到 <当前分支名称> （适用于远程和本地分支）以检出所选分支并将其变基到当前检出的分支之上。 如果远程分支在本地不存在，IntelliJ IDEA 将会静默地创建一个受跟踪的本地分支，切换到该分支并进行变基。

* 将 <当前分支名称> 变基到 <所选分支名称> （适用于远程和本地分支）将当前检出的分支变基到所选分支之上。

* 使用变基拉取到 <当前分支名称> （用于远程分支）以 [获取](sync-with-a-remote-repository.html#fetch)所选分支的更改并在这些更改的基础上变基当前分支。

观看此视频以更好地了解如何执行 rebase 操作：

[Video](https://www.youtube.com/v/wiU3TL3jM8I)

### 通过执行交互式变基编辑 Git 历史记录

通过 IntelliJ IDEA 中的 Git 集成，可以执行  交互式变基  来编辑历史记录，使其保持线性且有意义。 这使您可以在将功能分支中的更改集成到其他分支之前，通过修改单个提交、更改它们的顺序、将多个提交压缩为一个、跳过包含无关更改的提交等方式来清理提交历史。

Procedure: 编辑当前分支的历史

IntelliJ IDEA 允许您在将更改应用到不同分支之前编辑当前分支的提交历史。

> **Note:**
> 如果要使用  `-autosquash` 、  `--root`  或  `--update-refs`  等高级变基选项，请参阅 [编辑分支历史并将其集成到另一个分支](#interactive-rebase-onto-branch)。

1. 打开   Git   工具窗口 `Alt+9` (Windows), `⌘ 9` (macOS), `⌘ 9` (IntelliJ IDEA Classic (macOS)), `⌘ 9` (macOS System Shortcuts), `Alt+9` (XWin), `Alt+9` (GNOME), `Alt+9` (KDE), `Alt+9` (Emacs), `Alt+9` (Sublime Text), `⌘ 9` (Sublime Text (macOS)), `Alt+9` (Visual Studio), `⌘ 9` (Visual Studio (macOS)), `Alt+9` (NetBeans), `Alt+9` (Eclipse), `⌘ 9` (Eclipse (macOS)) 并切换到   日志   标签页。

2. 将日志过滤为仅显示当前分支的提交：

![按分支筛选日志](https://resources.jetbrains.com/help/img/idea/2026.3/VCS_log_branch_filter.png)

3. 请选择您要编辑的一系列提交中的最早提交，右键点击它并选择   从此处交互式变基  。

该   交互式变基  对话框将显示当前分支中在所选提交之后进行的所有提交的列表：

![交互式变基对话框](https://resources.jetbrains.com/help/img/idea/2026.3/VCS_interactive_rebase_dialog.png)

如果   从此处交互式变基  选项被禁用了，这可能是由于以下原因之一：

* 所选提交有多个父母

* 所选提交不在当前分支中

* 所选提交已推送到 [protected branch](edit-project-history.html#protected-branch)

若要确定原因，请将鼠标悬停在上下文菜单中的操作上，并查看状态栏中的消息：

![状态栏消息](https://resources.jetbrains.com/help/img/idea/2026.3/VCS_interactive_rebase_disabled.png)

> **Tip:**
> 要查看原因，请在导航栏右下角右键点击以打开上下文菜单，并确保已启用   状态文本   小组件。

4. 可以对分支历史记录执行以下更改:

* 更改提交的应用顺序 : 使用 ![向上箭头](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.moveUp.svg) 和 ![向下箭头](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.moveDown.svg) 按钮在列表中上移或下移提交。

* 选取提交 : 这是所有提交的默认状态。 如果需要撤消已对某个提交执行的操作，请点击 选取 ![选取](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.vcs.revert.svg)，使该提交按原样应用。

* 编辑 : 点击 停止并编辑 ![暂停按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.run.pause.svg)，这样在开始变基时会在此提交处停止，以便进行编辑。 当变基在某个提交处停止时，IntelliJ IDEA 窗口右下角会弹出通知，让你继续或中止变基: ![变基状态通知](https://resources.jetbrains.com/help/img/idea/2026.3/continue_rebase_notification.png) 可以使用上下文操作修改此提交（例如 还原 、 撤销 、 修正提交 等，然后再继续变基。 如果未执行任何操作，此提交将按原样应用。 如果已关闭通知，请从主菜单中选择 Git | 继续变基 以恢复该操作。

* 改写提交消息 : 点击 改写 ，或按两次某个提交，然后在打开的小型编辑器中编辑文本。

* 将两个提交合并为一个 : 选择要合并到前一个提交的提交，并点击 压缩（合并提交） ，或点击 压缩（合并提交） 按钮旁边的箭头，然后点击 修正 。 如果点击 压缩（合并提交） ，默认会合并两个提交的消息，因此如果不修改生成的提交消息，此操作将反映在分支历史记录中。 如果点击 修正 ，将丢弃 fixup 提交的提交消息，因此此更改在分支历史记录中不可见。 在这两种情况下，应用其中任一操作时，都可以在打开的小型编辑器中编辑提交消息。 > **Tip:** > 请注意， `fixup!` 和 `squash!` 提交的自动处理会受到 `rebase.autoSquash` [Git 配置设置](https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---autosquash)的影响。 > > > > 如果要在不更改 Git 配置的情况下为此特定变基使用 `--autosquash` ，请参阅 [编辑分支历史并将其集成到另一个分支](#interactive-rebase-onto-branch)。

* 忽略提交 : 点击 丢弃 ，使所选提交的更改不被应用。

* 撤消所有更改 : 点击 重置 ，放弃已应用到提交的所有操作。

因此，   变基提交   对话框会显示一个图表，用于展示已应用到分支中提交的所有操作，以便在开始变基前进行检查:

![交互式 Rebase 图表](https://resources.jetbrains.com/help/img/idea/2026.3/VCS_interactive_rebase_graph.png)

5. 点击   开始变基  。

Procedure: 编辑分支历史并将其集成到另一个分支

IntelliJ IDEA 允许将一个分支 [变基](#rebase-branch) 到另一个分支之上，并在应用更改之前编辑源分支历史记录。

1. 从主菜单中选择  `Git | 变基`

![Git rebase 对话框](https://resources.jetbrains.com/help/img/idea/2026.3/git_rebase_dialog.png)

2. 点击   修改选项   并选择   --interactive  。

3. 从列表中选择要将当前分支变基到的目标分支:

![在 Git rebase 对话框中选择目标分支](https://resources.jetbrains.com/help/img/idea/2026.3/git_rebase_choose_branch.png)

4. 要更改当前分支的上游基线或仅将特定提交序列移动到新目标，请点击   修改选项  并选择   --onto  。

在新基线字段中，输入要为当前分支变基的分支名称或提交哈希。

在旧基线字段中，输入标记截止点的分支名称或提交哈希。 Git 会将当前分支上此基线之后的所有提交放到新基线上。

![使用 --onto 指定提交哈希](https://resources.jetbrains.com/help/img/idea/2026.3/git_rebase_specify_commit.png)

> **Tip:**
> 要复制提交哈希，请在   日志  中选择它，右键点击并选择   复制修订号  。

5. 如果要变基的分支当前未检出，请点击   修改选项  ，点击   选择其他分支进行变基  ，然后从出现的列表中选择一个分支:

![选择要变基的分支](https://resources.jetbrains.com/help/img/idea/2026.3/git_rebase_choose_source_branch.png)

IntelliJ IDEA 将在开始变基操作之前检出此分支。

6. 根据您的具体情况，从   修改选项   列表中选择其他选项：

* `--rebase-merges` ：保留将要变基的提交中的分支结构。 请注意，这些合并提交中已解决的合并冲突或手动修改需要手动重新解决或重新应用。

* `--keep-empty` ：保留空提交，即相对于其父提交没有任何更改的提交。

* `--root` ：对分支中可到达的所有提交执行变基。

* `--update-refs` ：自动强制更新指向正在变基的提交的任何分支。

* `--autosquash` ：自动压缩标记为 fixup 或 squash 的提交。

> **Tip:**
> 有关这些选项的更多信息，请参阅 [git-rebase](https://git-scm.com/docs/git-rebase)

7. 点击   变基  。

交互式变基   对话框将显示包含当前分支中所有在所选提交之后进行的提交列表。

![交互式变基对话框](https://resources.jetbrains.com/help/img/idea/2026.3/VCS_interactive_rebase_dialog.png)

8. 可以对分支历史记录执行以下更改:

* 更改提交的应用顺序 : 使用 ![向上箭头](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.moveUp.svg) 和 ![向下箭头](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.moveDown.svg) 按钮在列表中上移或下移提交。

* 选取提交 : 这是所有提交的默认状态。 如果需要撤消已对某个提交执行的操作，请点击 选取 ![选取](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.vcs.revert.svg)，使该提交按原样应用。

* 编辑 : 点击 停止并编辑 ![暂停按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.run.pause.svg)，这样在开始变基时会在此提交处停止，以便进行编辑。 当变基在某个提交处停止时，IntelliJ IDEA 窗口右下角会弹出通知，让你继续或中止变基: ![变基状态通知](https://resources.jetbrains.com/help/img/idea/2026.3/continue_rebase_notification.png) 可以使用上下文操作修改此提交（例如 还原 、 撤销 、 修正提交 等，然后再继续变基。 如果未执行任何操作，此提交将按原样应用。 如果已关闭通知，请从主菜单中选择 Git | 继续变基 以恢复该操作。

* 改写提交消息 : 点击 改写 ，或按两次某个提交，然后在打开的小型编辑器中编辑文本。

* 将两个提交合并为一个 : 选择要合并到前一个提交的提交，并点击 压缩（合并提交） ，或点击 压缩（合并提交） 按钮旁边的箭头，然后点击 修正 。 如果点击 压缩（合并提交） ，默认会合并两个提交的消息，因此如果不修改生成的提交消息，此操作将反映在分支历史记录中。 如果点击 修正 ，将丢弃 fixup 提交的提交消息，因此此更改在分支历史记录中不可见。 在这两种情况下，应用其中任一操作时，都可以在打开的小型编辑器中编辑提交消息。 > **Tip:** > 请注意， `fixup!` 和 `squash!` 提交的自动处理会受到 `rebase.autoSquash` [Git 配置设置](https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---autosquash)的影响。 > > > > 如果要在不更改 Git 配置的情况下为此特定变基使用 `--autosquash` ，请参阅 [编辑分支历史并将其集成到另一个分支](#interactive-rebase-onto-branch)。

* 忽略提交 : 点击 丢弃 ，使所选提交的更改不被应用。

* 撤消所有更改 : 点击 重置 ，放弃已应用到提交的所有操作。

因此，   变基提交   对话框会显示一个图表，用于展示已应用到分支中提交的所有操作，以便在开始变基前进行检查:

![交互式 Rebase 图表](https://resources.jetbrains.com/help/img/idea/2026.3/VCS_interactive_rebase_graph.png)

9. 点击   开始变基  。

观看此视频，了解更多如何使用 Git Interactive Rebase：

[Video](https://www.youtube.com/v/bPX9VHjviEM)

## 挑选单独提交

有时候，您只需要将单个 commit 应用到不同的分支，而不是重新调整基底或合并整个分支。 例如，如果您正在功能分支中工作，并希望集成在两条分支分叉之后提交到  `main`  的热修复，这可能会很有用。 或者您可能希望将修复程序移植到先前的发布分支。 您可以通过使用   拣选   操作来完成此操作。

状态栏会显示 cherry-pick 操作的当前状态。 可以使用以下操作管理 cherry-pick 过程:

* 中止: 要取消正在进行的 cherry-pick，请在 VCS 微件中选择 中止 Cherry-Pick ，或点击状态栏中的 ![中止 Cherry-Pick](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.vcs.abort.svg)。

* 继续: 如果正在进行的 cherry-pick 已暂停（例如，为了解决冲突），请选择 VCS 微件中的 继续优选 ，或点击状态栏中的 ![继续优选](https://resources.jetbrains.com/help/img/idea/2026.3/intellij.platform.vcs.dvcs.impl.shared.icons.new.resolveContinue.svg) 以完成该过程。

![Cherry pick 操作状态](https://resources.jetbrains.com/help/img/idea/2026.3/cherry_pick_status.png)

Procedure: 将提交应用到另一个分支

1. 在   [分支](manage-branches.html)   弹出窗口（主菜单  `Git | 分支` ）中，选择要将更改集成到的目标分支，并从弹出菜单中选择   检出   以切换到该分支。

2. 打开   Git   工具窗口 `Alt+9` (Windows), `⌘ 9` (macOS), `⌘ 9` (IntelliJ IDEA Classic (macOS)), `⌘ 9` (macOS System Shortcuts), `Alt+9` (XWin), `Alt+9` (GNOME), `Alt+9` (KDE), `Alt+9` (Emacs), `Alt+9` (Sublime Text), `⌘ 9` (Sublime Text (macOS)), `Alt+9` (Visual Studio), `⌘ 9` (Visual Studio (macOS)), `Alt+9` (NetBeans), `Alt+9` (Eclipse), `⌘ 9` (Eclipse (macOS)) 并切换到   日志   标签页。

3. 找到包含您想要 cherry-pick 的更改的提交。

可以使用分支、用户或日期筛选器筛选提交。 也可以点击工具栏上的 ![视图选项](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.show.svg)，并选择   高亮 | 未选择的提交   选项，将已应用到当前分支的提交灰显。 如果您知道提交哈希，或者正在查找带标签的提交，您也可以使用   转到哈希 / 分支 / 标记   操作（在   Git   工具窗口 `Alt+9` (Windows), `⌘ 9` (macOS), `⌘ 9` (IntelliJ IDEA Classic (macOS)), `⌘ 9` (macOS System Shortcuts), `Alt+9` (XWin), `Alt+9` (GNOME), `Alt+9` (KDE), `Alt+9` (Emacs), `Alt+9` (Sublime Text), `⌘ 9` (Sublime Text (macOS)), `Alt+9` (Visual Studio), `⌘ 9` (Visual Studio (macOS)), `Alt+9` (NetBeans), `Alt+9` (Eclipse), `⌘ 9` (Eclipse (macOS)) 的   日志   选项卡中按 `Ctrl+F` (Windows), `⌘ F` (macOS), `⌘ F` (IntelliJ IDEA Classic (macOS)), `⌘ F` (macOS System Shortcuts), `Ctrl+F` (XWin), `Ctrl+F` (GNOME), `Ctrl+F` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+F` (Sublime Text), `⌘ F` (Sublime Text (macOS)), `Ctrl+F` (Visual Studio), `⌘ F` (Visual Studio (macOS)), `Ctrl+F` (NetBeans), `Ctrl+F` (Eclipse), `Ctrl+F` (Eclipse (macOS))，或点击工具栏上的 ![搜索](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.toolwindow.find.svg)）。

4. 选择所需的提交。 请使用   提交详细信息   区域中的信息来确认这些是您想要转移到另一个分支的更改。

5. 请点击   拣选   ![Cherry-Pick 按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app-client.expui.vcs.cherryPick.svg) 工具栏。 IntelliJ IDEA 将对目标分支应用并提交更改。

6. 如果 cherry-pick 因冲突而失败，所选更改将显示在   提交   工具窗口 ( `Alt+0` (Windows), `⌘ 0` (macOS), `⌘ 0` (IntelliJ IDEA Classic (macOS)), `⌘ 0` (macOS System Shortcuts), `Alt+0` (XWin), `Alt+0` (GNOME), `Alt+0` (KDE), `Alt+0` (Emacs), `Alt+0` (Sublime Text), `⌘ 0` (Sublime Text (macOS)), `Alt+0` (Visual Studio), `Alt+0` (Visual Studio (macOS)), `Alt+0` (NetBeans), `Alt+0` (Eclipse), `⌘ 0` (Eclipse (macOS)) ) 中可见的   更改   区域内。 您可以稍后查看这些更改并在必要时提交。

如果您希望 IntelliJ IDEA 在 cherry-pick 失败时自动创建变更列表，请在  `设置 | 版本控制 | 更改列表`  中开启相应的设置。

7. 将更改推送到目标分支。

以下视频将帮助您了解 cherry-pick 的工作原理：

[Video](https://www.youtube.com/v/SkcvWURJkWQ)

## 应用单独更改

设想您对一个文件进行了更改，并希望将这些更改应用到另一个分支，但这些更改与其他修改的文件一起被提交了。 IntelliJ IDEA 允许将单独的更改应用到更改列表，而不是 cherry-pick 整个提交，并且不必立即提交这些更改。

Procedure:

1. 在   [分支](manage-branches.html)   弹出窗口（主菜单  `Git | 分支` ）中，选择要将更改集成到的目标分支，并从弹出菜单中选择   检出   以切换到该分支。

2. 打开   Git   工具窗口 `Alt+9` (Windows), `⌘ 9` (macOS), `⌘ 9` (IntelliJ IDEA Classic (macOS)), `⌘ 9` (macOS System Shortcuts), `Alt+9` (XWin), `Alt+9` (GNOME), `Alt+9` (KDE), `Alt+9` (Emacs), `Alt+9` (Sublime Text), `⌘ 9` (Sublime Text (macOS)), `Alt+9` (Visual Studio), `⌘ 9` (Visual Studio (macOS)), `Alt+9` (NetBeans), `Alt+9` (Eclipse), `⌘ 9` (Eclipse (macOS)) 并切换到   日志   标签页。

3. 找到包含您想应用的更改的提交。

可以使用分支、用户或日期筛选器筛选提交。 也可以点击工具栏上的 ![眼睛图标](https://resources.jetbrains.com/help/img/idea/2026.3/app.general.inspectionsEye.svg)，并选择   高亮 | 未选择的提交   选项，将已应用到当前分支的提交灰显。 如果您知道提交哈希，或者正在查找带标签的提交，您也可以使用   转到哈希 / 分支 / 标记   操作（在   Git   工具窗口 `Alt+9` (Windows), `⌘ 9` (macOS), `⌘ 9` (IntelliJ IDEA Classic (macOS)), `⌘ 9` (macOS System Shortcuts), `Alt+9` (XWin), `Alt+9` (GNOME), `Alt+9` (KDE), `Alt+9` (Emacs), `Alt+9` (Sublime Text), `⌘ 9` (Sublime Text (macOS)), `Alt+9` (Visual Studio), `⌘ 9` (Visual Studio (macOS)), `Alt+9` (NetBeans), `Alt+9` (Eclipse), `⌘ 9` (Eclipse (macOS)) 的   日志   选项卡中按 `Ctrl+F` (Windows), `⌘ F` (macOS), `⌘ F` (IntelliJ IDEA Classic (macOS)), `⌘ F` (macOS System Shortcuts), `Ctrl+F` (XWin), `Ctrl+F` (GNOME), `Ctrl+F` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+F` (Sublime Text), `⌘ F` (Sublime Text (macOS)), `Ctrl+F` (Visual Studio), `⌘ F` (Visual Studio (macOS)), `Ctrl+F` (NetBeans), `Ctrl+F` (Eclipse), `Ctrl+F` (Eclipse (macOS))，或点击工具栏上的 ![搜索](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.toolwindow.find.svg)）。

4. 在右侧的   提交详细信息   窗格中，选择包含您要应用到目标分支的更改的文件，并从上下文菜单中选择   拣选所选更改  。

5. 在打开的对话框中，选择一个现有的 changelist 或输入一个新 changelist 的名称，然后点击   OK  。

6. 提交更改，然后将其推送到目标分支。

## 应用独立文件

除了对单个文件应用单独的更改，您还可以将整个文件的内容复制到不同的分支。 例如，如果您想应用的文件在目标分支中不存在，或其变更是在多个提交中进行的，这可能会很有用。

Procedure:

1. [切换](manage-branches.html#switch-branches)到将应用更改的分支。

2. 在   [分支](manage-branches.html)   弹出窗口（主菜单  `Git | 分支` ）或   分支   面板的   Git   工具窗口中，选择包含您想要应用的文件的分支，并从上下文菜单中选择   显示与工作树的差异  。

更改   工具窗口显示了所选分支与当前检出的分支中不同的所有文件列表：

![显示所选分支与当前工作树之间的差异](https://resources.jetbrains.com/help/img/idea/2026.3/git_branches_diff.png)

* 所选分支中存在但当前分支中缺失的文件会标记为灰色。

* 当前分支中存在但所选分支中缺失的文件会标记为绿色。

* 所选分支与当前分支之间存在差异的文件会标记为蓝色。

可以点击   交换分支   链接，更改在与另一个分支进行比较时被视为基准的分支。

3. 选择要应用到当前分支的文件，然后在上下文菜单中选择   从分支获取  ，或点击工具栏上的 ![从分支获取](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.download.svg)。

4. 提交并推送更改。 IntelliJ IDEA 将把文件的全部内容复制到当前分支。

> **Note:**
> 您还可以将文件应用到另一个分支，从   项目  视图：选择包含您要复制的文件的文件夹，并从上下文菜单中选择   Git | 与分支比较 | <branch_name>  ，然后点击工具栏上的   Get  图标 ![Get](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.download.svg)。

## See also

### 外部链接

[git-rebase official documentation](https://git-scm.com/docs/git-rebase)

