# 与远程 Git 仓库同步（fetch、pull、update）

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

在您通过 [推送更改到上游](commit-and-push-changes.html#push)来共享您的工作成果之前，您需要与远程存储库同步，以确保您的本地项目副本是最新的。 您可以通过以下方式之一来执行此操作： [fetch changes](#fetch)、 [pull changes](#pull)或 [更新您的项目](#update)。

VCS 微件会显示尚未提取的传入提交数量（分支名称旁的蓝色箭头图标 ![传入提交指示器](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.vcs.changesUpdate%4012x12.svg)）以及传出提交数量（分支名称旁的绿色箭头图标 ![传出提交指示器](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.vcs.changesPush%4012x12.svg)）。

![传入提交指示器](https://resources.jetbrains.com/help/img/idea/2026.3/Git_branches_incoming_commits_indicator.png)

## 获取变更

当您  获取 上游的更改时，自您上次与远程存储库同步以来所做的所有 commit 的新数据都会下载到您的本地副本中。 这些新数据不会集成到您的本地文件中，并且更改不会应用到您的代码中。

获取的更改会存储为远程分支，您可以在将其与您的文件 [合并](apply-changes-from-one-branch-to-another.html#merge)之前对其进行审查。 由于  提取  不会影响您的本地开发环境，这是获取远程存储库中所有更改更新的安全方式。

Procedure:

从上游提取更改有三种方式：

* 在主菜单中选择   Git | 获取  。

![主菜单中的 Fetch 选项](https://resources.jetbrains.com/help/img/idea/2026.3/fetch_main_menu.png)

* 打开 VCS 微件，然后点击右上角的 ![Fetch 图标](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.vcs.fetch.svg)。

![VCS 微件中的提取图标](https://resources.jetbrains.com/help/img/idea/2026.3/VCS_fetch_from_branches_popup.png)

* 启用项目中所有远程仓库的自动提取：在  `设置 | 版本控制 | Git | 更新`  中，选择   自动提取远程更改   选项。

此后台任务默认每 20 分钟运行一次（可通过  `git.update.incoming.info.time`  注册表密钥配置）。

[观看此视频](https://youtu.be/tnz2I9rxrfk) 以更好地了解在 IDE 中如何执行 fetch 操作。

## 更新分支

如果需要将特定分支与其远程追踪分支同步，请使用  update 。 这是一个方便的快捷方式，用于 [获取](#fetch)并随后将更改应用到所选分支。

Procedure:

* 在 VCS 微件中，或在   版本控制   工具窗口的   分支   窗格中，选择一个分支，并从上下文菜单中选择   更新  。

IntelliJ IDEA 将从远程分支 [pull](https://git-scm.com/docs/git-pull) 更改，并根据  `设置 | 版本控制 | Git`  中选择的更新方法，将其 [rebase](apply-changes-from-one-branch-to-another.html#rebase-branch) 或 [merge](apply-changes-from-one-branch-to-another.html#merge) 到本地分支。

## 拉取更改

如果您需要将更改从另一个分支而不是其远程跟踪分支合并到当前分支，请使用  pull 。 当您  pull 时，您不仅会下载新的数据，还会将它集成到您的本地工作副本中。

Procedure:

1. 在主菜单中，前往  `Git | 获取` 。   拉取更改  对话框打开：

![拉取对话框](https://resources.jetbrains.com/help/img/idea/2026.3/git_pull_dialog.png)

2. 如果您有一个多存储库项目，将会出现一个额外的下拉菜单，让您选择存储库。

3. 如果您的项目定义了多个远程仓库，请从列表中选择一个远程仓库（默认情况下为  `origin` ）。

4. 请选择 您要从中拉取更改的分支，该分支将被签出。 默认情况下，由当前本地分支跟踪的远程分支会被选中。 如果您指定了不同的分支，IntelliJ IDEA 将记住您的选择，并在将来默认显示此分支。

5. 如果您需要使用选项进行拉取，请点击   修改选项  并从以下选项中选择：

* `--rebase` ：在 [获取](#fetch)来自远程分支的更改后，IntelliJ IDEA 将 [变基](apply-changes-from-one-branch-to-another.html#rebase-branch)本地未推送的更改到获取的更改上。

* `--ff-only` : 仅在可以快进的情况下才会解决合并。

* `--no-ff` : 无论何种情况都会创建合并提交，即使该合并可以通过快进解决。

* `--squash` : 将在当前分支之上创建一个包含所有拉取更改的单个提交。

* `--no-commit` ：将执行合并，但不会创建合并提交，以便您可以在提交之前检查合并的结果。

* `--no-verify` ：执行合并，同时绕过通常默认运行的 pre-merge 和 commit-message 钩子。

有关  `pull`  选项的更多信息，请参阅 [https://git-scm.com/docs/git-pull](https://git-scm.com/docs/git-pull)。

6. 点击   拉取  。

## 更新您的项目

如果您有多个项目根目录，或每次与远程仓库同步时都想获取所有分支的更改，您可能会发现  更新 您的项目是一个更方便的选项。

当您执行  更新 操作时，IntelliJ IDEA会 [获取](#fetch)所有项目根和分支的更改，并 [合并](apply-changes-from-one-branch-to-another.html#merge)跟踪的远程分支到您的本地工作副本中（相当于  pull ）。

> **Note:**
> 如果您的项目包含 [submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules)，并且它们位于一个分支上，它们也会自动更新。
>
>
>
> 如果子模块处于  detached HEAD 状态，IntelliJ IDEA 将会调用  `git submodule update` ，这将检出根存储库中的引用提交。 这意味着只有在根仓库中的子模块引用发生变化或添加了新子模块时才会执行更新。

Procedure:

1. 在主菜单中，转到  `Git | 更新项目`  或按 `Ctrl+T` (Windows), `⌘ T` (macOS), `⌘ T` (IntelliJ IDEA Classic (macOS)), `⌘ T` (macOS System Shortcuts), `Ctrl+T` (XWin), `Ctrl+T` (GNOME), `Ctrl+T` (KDE), `Ctrl+T` (Emacs), `Ctrl+T` (Sublime Text), `Ctrl+T` (Sublime Text (macOS)), `Ctrl+Alt+W` (Visual Studio), `⌘ ⌥ W` (Visual Studio (macOS)), `Ctrl+T` (NetBeans), `Ctrl+T` (Eclipse), `Ctrl+T` (Eclipse (macOS))。   更新项目   对话框将打开。

2. 选择更新类型（此策略将应用于所有处于 Git 版本控制下的根目录）：

* 将传入的更改合并到当前分支 ：选择此选项以在更新期间执行 [合并](http://schacon.github.io/git/git-merge.html)。 这相当于先运行 `git fetch` ，然后运行 `git merge` ，或运行 `git pull --no-rebase` 。

* 将当前分支在传入更改之上重新基底 ：选择此选项可在更新期间执行 [变基](http://schacon.github.io/git/git-rebase.html)。 这相当于先运行 `git fetch` ，然后运行 `git rebase` ，或运行 `git pull --rebase` （所有本地提交都将放在更新后的上游 head 之上）。

* 重置到远程分支 ：选择此选项以丢弃所有本地提交，并使分支与远程版本完全一致。

如果选择今后不再显示   更新项目  对话框，之后想要修改默认更新策略，可转到   版本控制 | 确认  设置页面 `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS))，在   在之前显示选项  下选择   更新  ，并在下次执行更新时修改更新策略。

当更新操作完成后， [更新信息](version-control-tool-window-update-info-tab.html)选项卡会添加到   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))中。 它列出了自上次与远程同步以来所做的所有提交，并让您像在 [日志选项卡](log-tab.html)中一样查看这些更改。 默认情况下，该选项卡会自动打开。 要更改此行为，请在  `设置 | 高级设置 | 版本控制 | Git`  中清除   更新项目后自动打开"更新信息"标签页   复选框。

> **Tip:**
> 如果您想查看自上次更新以来修改的所有文件的完整列表，请将插入符号置于提交列表中的任意位置并按 `Ctrl+A` (Windows), `⌘ A` (macOS), `⌘ A` (IntelliJ IDEA Classic (macOS)), `⌘ A` (macOS System Shortcuts), `Ctrl+A` (XWin), `Ctrl+A` (GNOME), `Ctrl+A` (KDE), `Ctrl+X, H` (Emacs), `Ctrl+A` (Sublime Text), `⌘ A` (Sublime Text (macOS)), `Ctrl+A` (Visual Studio), `⌘ A` (Visual Studio (macOS)), `Ctrl+A` (NetBeans), `Ctrl+A` (Eclipse), `⌘ A` (Eclipse (macOS))。 您可以禁用分组以查看扁平列表：在   已更改的文件  窗格的工具栏上点击 ![按以下内容分组](https://resources.jetbrains.com/help/img/idea/2026.3/app.actions.groupBy.svg)。

