如何使用Git:参考指南

来自菜鸟教程
跳转至:导航、​搜索

Git 备忘单

介绍

开发人员和开源软件维护人员团队通常通过 Git(一种支持协作的分布式版本控制系统)来管理他们的项目。

本备忘单样式指南提供了对在 Git 存储库中工作和协作有用的命令的快速参考。 要安装和配置 Git,请务必阅读“如何为开源做出贡献:Git 入门”。

如何使用本指南:

  • 本指南采用备忘单格式,带有独立的命令行片段。
  • 跳转到与您尝试完成的任务相关的任何部分。
  • 当您在本指南的命令中看到 highlighted text 时,请记住,此文本应引用 您自己的 存储库中的提交和文件。

设置和初始化

使用以下命令检查您的 Git 版本,这也将确认 Git 已安装:

git --version

Git 允许您配置许多将应用于本地计算机上的所有存储库的设置。 例如,配置一个用户名,Git 将使用该用户名将您对本地存储库所做的任何更改归功于您:

git config --global user.name “firstname lastname” 

配置与每个历史标记关联的电子邮件地址:

git config --global user.email “valid-email” 

也配置您喜欢的文本编辑器:

git config --global core.editor “nano”

您可以使用 init 将当前工作目录初始化为 Git 存储库:

git init

要复制远程托管的现有 Git 存储库,您将使用 git clone 和存储库的 URL 或服务器位置(在后一种情况下,您将使用 ssh):

git clone https://www.github.com/username/repo-name

显示当前 Git 目录的远程存储库:

git remote

要获得更详细的输出,请使用 -v 标志:

git remote -v

添加 Git 上游,可以是 URL,也可以托管在服务器上(在后一种情况下,使用 ssh 连接):

git remote add upstream https://www.github.com/username/repo-name

分期

当您修改了一个文件并将其标记为在您的下一次提交中进行时,它被认为是一个暂存文件。

检查 Git 存储库的状态,包括添加的未暂存的文件和已暂存的文件:

git status

要暂存修改过的文件,请使用 add 命令,您可以在提交前多次运行该命令。 如果您进行了想要包含在下一次提交中的后续更改,则必须再次运行 add

您可以使用 add 指定特定文件:

git add my_script.py

使用 . 您可以添加当前目录中的所有文件,包括以 . 开头的文件:

git add .

如果要添加当前目录中的所有文件以及子目录中的文件,可以使用 -all-A 标志:

git add -A

您可以使用 reset 从暂存中删除文件,同时保留工作目录中的更改:

git reset my_script.py

提交

暂存更新后,您就可以提交更新了,这将记录您对存储库所做的更改。

要提交暂存文件,您将使用有意义的提交消息运行 commit 命令,以便跟踪提交:

git commit -m "Commit message"

您可以通过一步提交来压缩所有跟踪的文件:

git commit -am "Commit message"

如果您需要修改提交消息,可以使用 --amend 标志:

git commit --amend -m "New commit message"

分支机构

Git 中的分支是指向存储库中某个提交的可移动指针,它允许您隔离工作并管理功能开发和集成。 您可以通过阅读 Git 文档 了解有关分支的更多信息。

使用 branch 命令列出所有当前分支。 一个星号 (*) 将出现在您当前活动的分支旁边:

git branch

创建一个新分支。 在切换到新分支之前,您将保留在当前活动的分支上:

git branch new-branch

切换到任何现有分支并将其检出到您当前的工作目录中:

git checkout another-branch

您可以使用 -b 标志来合并新分支的创建和签出:

git checkout -b new-branch

重命名您的分支名称:

git branch -m current-branch-name new-branch-name

将指定分支的历史合并到您当前正在使用的分支中:

git merge branch-name

中止合并,以防发生冲突:

git merge --abort

您还可以使用引用特定提交的字符串选择要与 cherry-pick 合并的特定提交:

git cherry-pick f7649d0

当您合并了一个分支并且不再需要该分支时,您可以将其删除:

git branch -d branch-name

如果你还没有将一个分支合并到主分支,但确定要删除它,你可以 force 删除一个分支:

git branch -D branch-name

协作和更新

要从另一个存储库(例如远程上游)下载更改,您将使用 fetch

git fetch upstream

合并获取的提交。 请注意,某些存储库可能使用 master 而不是 main

git merge upstream/main

将本地分支提交推送或传输到远程存储库分支:

git push origin main

从跟踪远程分支获取并合并任何提交:

git pull

检查

显示当前活动分支的提交历史:

git log

显示更改特定文件的提交。 无论文件重命名如何,这都会跟随文件:

git log --follow my_script.py

显示一个分支上而不是另一个分支上的提交。 这将在 a-branch 上显示不在 b-branch 上的提交:

git log a-branch..b-branch

查看参考日志 (reflog) 以了解分支的提示和其他参考文献最后一次在存储库中更新的时间:

git reflog

通过其提交字符串或哈希以更易于阅读的格式显示 Git 中的任何对象:

git show de754f5

显示更改

git diff 命令显示提交、分支等之间的更改。 您可以通过 Git 文档 更全面地了解它。

比较暂存区的修改文件:

git diff --staged

显示在 a-branch 中但不在 b-branch 中的内容的差异:

git diff a-branch..b-branch

显示两个特定提交之间的差异:

git diff 61ce3e6..e221d9c

通过从项目中删除文件来跟踪路径更改并将此删除暂存以进行提交:

git rm file

或者更改现有文件路径,然后进行移动:

git mv existing-path new-path

检查提交日志以查看是否已移动任何路径:

git log --stat -M

藏匿

有时您会发现您对某些代码进行了更改,但在完成之前您必须开始处理其他内容。 您还没有准备好提交到目前为止所做的更改,但您不想丢失您的工作。 git stash 命令将允许您保存本地修改并恢复到与最近的 HEAD 提交一致的工作目录。

存放您当前的工作:

git stash

查看您当前隐藏的内容:

git stash list

您的存储将被命名为 stash@{0}stash@{1} 等等。

显示有关特定存储的信息:

git stash show stash@{0}

要将当前存储中的文件从存储中取出,同时仍保留存储,请使用 apply

git stash apply stash@{0}

如果您想从存储区中取出文件,并且不再需要存储区,请使用 pop

git stash pop stash@{0}

如果您不再需要保存在特定存储中的文件,您可以 drop 存储:

git stash drop stash@{0}

如果您保存了多个存储并且不再需要使用它们中的任何一个,您可以使用 clear 删除它们:

git stash clear

忽略文件

如果您想将文件保留在本地 Git 目录中,但不想将它们提交到项目中,您可以将这些文件添加到您的 .gitignore 文件中,这样它们就不会引起冲突。

使用 nano 等文本编辑器将文件添加到 .gitignore 文件:

nano .gitignore

要查看 .gitignore 文件的示例,您可以查看 GitHub 的 .gitignore 模板 repo

变基

rebase 允许我们通过更改它们所基于的提交来移动分支。 使用变基,您可以压缩或改写提交。

您可以通过调用您想要变基的提交次数来启动变基(在以下情况下为 5):

git rebase -i HEAD~5

或者,您可以基于特定的提交字符串或散列进行变基:

git rebase -i 074a4e5

压缩或改写提交后,您可以在项目上游代码的最新版本之上完成分支的变基。 请注意,某些存储库可能使用 master 而不是 main

git rebase upstream/main

要了解更多关于变基和更新的信息,您可以阅读 如何变基和更新拉取请求,它也适用于任何类型的提交。

还原和重置

您可以使用 revert 恢复在给定提交上所做的更改。 您的工作树需要清洁才能实现:

git revert 1fc6665

有时,包括在 rebase 之后,您需要重置工作树。 您可以使用以下命令重置为特定的提交,并 删除所有更改

git reset --hard 1fc6665

要强制将您最后一次已知的非冲突提交推送到源存储库,您需要使用 --force

Warning:强制推送到主分支(有时是 master)通常不受欢迎,除非有非常重要的原因。 在处理自己的存储库时要谨慎使用,并在协作时努力避免这种情况。


git push --force origin main

要从 Git 目录中删除本地未跟踪的文件和子目录以获得干净的工作分支,可以使用 git clean

git clean -f -d

如果您需要修改本地存储库,使其看起来像当前的上游主分支(即冲突太多),您可以执行硬重置:

注意:执行此命令将使您的本地存储库看起来与上游完全一样。 您所做但未拉入上游 的任何提交都将被销毁


git reset --hard upstream/main

结论

本指南涵盖了您在管理存储库和协作软件时可能使用的一些更常见的 Git 命令。

您可以在我们的开源入门教程系列中了解更多关于开源软件和协作的信息:

作为 Git 工作的一部分,您可能会发现还有更多有用的命令和变体。 要了解有关所有可用选项的更多信息,您可以运行以下命令以接收有用信息:

git --help

您还可以从 官方 Git 网站 阅读有关 Git 的更多信息并查看 Git 的文档。