Git 常见问题解答

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

在本文中,请查找有关专为 Azure Repos 定制的 Git 的常见问题的解答。 无论你是要管理远程分支、识别当前分支,还是要处理其他不太常见的 Git 任务,本指南都提供了有用的提示和解决方案。 深入了解以下部分以增强 Git 工作流并解决常见问题。

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

首先,请确保已配置 origin 存储库。 如果使用 git clone 克隆了存储库,则应拥有此存储库。 签出本地不存在的分支时,Git 会检查是否存在同名的远程分支。 如果存在,Git 会创建一个引用远程分支的本地分支。 使用 git pull 下载提交,并在本地更新分支历史记录。

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

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

何时应进行 Git 提交?

最佳做法是为逻辑上不同的更改进行单独提交。 将提交视为日志中的条目。 每当进行值得注意的更改时,请将其记录在提交中。 一种常用方法是允许频繁的本地提交,但在推送之前通过变基来压缩它们。 这提供了灵活性,同时可简化提交历史记录。

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

具有许多提交和参与者的大型项目可能会导致 main 分支历史记录,此历史记录反映了主题分支的开发,而不是整个项目。 Git 允许您通过压缩提交和变基来压缩分支上的提交。 压缩提交会使分支历史记录不那么详细,从而简化合并后主分支上的提交历史记录。

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

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

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

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

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

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

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

拉取请求无法与以下消息合并:“无法自动合并:一个内部 git 对象(blob、树、提交或标记)太大,导致了 TF401022 异常。 你可以尝试使用 LFS,将合并或大型提交拆分为多个小型提交。

此问题与大型二进制文件中的合并冲突相关。 文件的当前限制为 100 MB。 解决方法是通过在本地将目标合并到源中、解决冲突并推送更改,从而在本地解决合并冲突。

建议使用 Git LFS(大型文件存储)来存储大型二进制文件,不仅要避免冲突,还要管理影响克隆和推送时间的总体存储库大小。

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

如果要保存更改而不提交更改,请使用 Git 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 储藏文档

如何更改 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 "example-user@example-site.com"
> git config --global user.name "Example User"

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

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

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

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