Git 常见问题解答

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

如何轻松地将远程分支下载到本地存储库?

首先,请确保已配置 origin 存储库。 如果你克隆了 (git clone) 存储库,则应具有此类存储库。 签出本地不存在的分支时,Git 会确定是否存在同名的远程分支。 如果存在,Git 会创建一个本地分支,该分支引用该名称的远程分支。 使用 git pull 下载提交,并让 Git 在本地获取分支历史记录。

如何找出正在处理的分支?

git branch 不带参数显示本地分支,并突出显示已签出的分支。在 Visual Studio 中,处理存储在本地 Git 存储库中的项目时,状态栏还会显示当前分支。

何时应进行 Git 提交?

公认的做法是对逻辑上独立的更改进行单独的提交。 将提交视为日志中的条目。 每当进行值得注意的更改时,请将其记录在提交中。 一种常用的选项是允许每个人在本地尽可能多地提交,但在他们推送本地提交之前,会首先通过变基对其进行压缩。 此选项使用户能够灵活地进行频繁提交,同时简化提交历史记录。

如果每个分支都保留其完整的提交历史记录,这是否会使 *main* 的提交历史记录随着时间的推移而难以追踪?

具有许多提交和一系列参与者的大型项目可能会产生 main 分支的提交历史记录,该分支表示合并到 main 中的主题分支的开发历史记录,而不是整个项目的开发历史记录。 Git 提供了一种工具,用于通过压缩提交和变基来压缩分支上的提交。 压缩提交时,分支上的提交历史记录将变得不那么详细,这使得合并后主分支上的提交历史记录变得更简单。

如何找出谁对文件进行了特定更改?

使用 git blame 命令找出谁对文件进行了特定更改。 在本地存储库中,可以使用 -L 参数运行 git blame,指定所需的行。 Blame 可生成格式化输出,显示上次更新该行的提交以及提交者的姓名。

> git blame foo.js -L 20,+40  # show the blame output for the next 40 lines starting at line 20

215d1108 (Francis Totten 2015-11-21 09:54:23 -0800 20) line 20 of the code
215d1108 (Francis Totten 2015-11-21 09:54:23 -0800 21) line 21 of the code
215d1108 (Francis Totten 2015-11-21 09:54:23 -0800 22) line 22 of the code

Blame 可搜索提交历史记录。 你还可以在 Web 门户中查看文件的历史记录,以确定更改者和更改时间。 打开存储库和分支的代码资源管理器,然后选择所需文件。 Azure Repos 将显示当前分支上该文件的完整提交历史记录。

我已对某些文件进行了更改,现在无法签出到其他分支或对工作进行变基。

签出到 Git 中的其他分支会影响文件系统上文件的状态。 Git 使用提交历史记录来确保你正在使用可表示分支状态的文件。 如果在有未提交的更改时尝试更改分支,则这些更改将在签出期间被覆盖。 由于 Git 不希望意外丢失更改,因此会阻止签出。 可以使用两个选项:

我已经完成了一些工作,但需要切换到其他内容。 如何在不提交更改的情况下保存工作以供以后使用?

有时,你希望保留更改,但不想提交更改,因为更改还没有达到可以提交的程度。 使用 Git stash。 Stash 在分支中获取当前暂存和非暂存更改并保存工作,然后将分支返回到上次提交的状态。 你可以更改到另一个分支,执行工作,然后在返回到该分支时运行 stash apply 以还原更改。

> git stash
Saved working directory and index state WIP on feature1: be26067 updated endpoint docs
HEAD is now at be26067

运行 git stash apply 时,最近储藏的更改将应用于当前分支。 如果应用储藏的更改时发生冲突,则 stash 将还原对不存在冲突的文件的更改,并在存在冲突的文件中创建冲突标记以便于解决问题。 在这种情况下,应手动合并更改。

完成储藏后,使用 git stash drop 将其删除。此命令将删除最后一组储藏的更改。

可以拥有多个储藏,但这样做需要更多的手动操作,因为必须显式应用和删除储藏。 有关详细信息,请参阅 Git Stash 文档

如何更改 Git 命令行工具的默认编辑器?

默认情况下,命令行 Git 在请求提交消息、执行变基和其他需要额外信息才能完成的工作时,将使用命令行编辑器。 使用 git config 配置默认编辑器:

> git config core.editor _path_to_editor_ _options_to_editor_

适用于 Windows 的 Git 可以轻松地将记事本设置为编辑器:

> git config core.editor notepad

此命令将 Windows 记事本配置为根据需要编辑 Git 信息,并正确地将文本从 Git 传递到记事本。 你还可以指定

> git config format.commitMessageColumns 72 

将提交消息中的文本列保留为首选 72 字符,并在一行中达到该字符限制后换行。

如何更改提交中显示的用户名和电子邮件?

Git 将用户名和电子邮件地址信息置于每个提交中,Azure Repos 在查看提交和处理拉取请求时使用此信息。 如果使用命令行,则可以使用 git config 命令更新显示的名称和电子邮件信息:

> git config --global user.email "frank@fabrikam.com"
> git config --global user.name "Francis Totten"

--global 选项将设置包含在该系统上所有 Git 存储库的提交中的电子邮件和名称。 如果要更改单个存储库的设置,则必须更改到 Git 存储库所在的目录,并在不带 --global 标志的情况下运行上述命令。

还可以通过 Visual Studio 更改名称和电子邮件设置。 在“Git”菜单中,选择“设置”。在“选项”对话框中,选择“Git 全局设置”或“Git 存储库设置”>“常规”。

Visual Studio 2019 版本 16.8 及更高版本提供 Git 版本控制体验,同时保留团队资源管理器 Git 用户界面。 若要使用团队资源管理器,请取消选中菜单栏中的“工具”>“选项”>“预览功能”>“新 Git 用户体验”。 可以互换使用任一界面中的 Git 功能。

在团队资源管理器中,选择“设置”,然后在“Git”下选择“全局设置”或“存储库设置”链接。