Git 常用命令总结

Git是一个开源的分布式版本控制系统,它使开发人员可以跟踪其源代码中的更改。git CLI提供了大量的git命令,以使开发人员更轻松地进行软件开发。为了方便读者,我们的编辑人员概述了一些最有用的命令。

配置用户配置文件

您可以使用git config命令配置git配置文件。您至少可以设置的是用户名和电子邮件地址。Git允许用户全局或基于项目配置这些策略。使用以下命令为每个存储库设置用户和电子邮件地址。

git config user.name "myname"
git config user.email my@email

添加–global选项以全局设置这些策略。

git config --global user.name "myname"
git config --global user.email my@email

初始化Git仓库

git仓库或简单的repo是您的开源项目的根目录。它包含源文件,对象,头和标签的子目录等。您可以使用以下命令轻松初始化git repo。

#进入需要的目录
 git init

现在,您可以开始添加源文件,并根据需要进行修改。

添加项目文件

使用git将文件添加到现有项目非常容易。您可以使用git add命令轻松地将所有修改后的文件/目录添加到跟踪系统。

# 指定特定文件到项目索引
git add file
#或使用,以下命令添加所有的文件
git add *

发出git add命令时,它将所有文件从当前工作目录添加到项目索引中。Git会将其标记为暂存。

验证添加的文件

您可以使用git status命令验证将在下一次提交期间暂存的文件。它将显示所有新文件或已更改的文件。

git status

提交对存储库的更改

提交更改时,git会捕获代码库的快照。这就是git跟踪更改并提供版本控制的方式。您需要为此使用git commit命令。

git commit

当您运行上述命令时,git会要求您输入一些信息,例如添加说明。它将调用您在git安装过程中设置的默认Linux编辑器。使用以下命令可避免这种不当行为。

git commit -m "readme"

因此,如果使用-m选项,则可以直接添加描述。

显示日志

只要想查看对存储库所做的更改,就可以查看日志。只需在Linux终端上使用git log命令执行此操作即可。

git log
git log --file

第一个命令将显示有关git提交的一般信息。如果只想查看特定文件中的更改,请使用第二个命令。您还可以添加更多选项,例如–log-size选项,甚至使用正则表达式进行搜索提交。

提交并显示日志

验证项目分支

git分支代表您项目中的独立开发线。您可以使用git branch命令非常轻松地检查当前分支。它会显示您正在开发新功能或修改较旧功能的当前活动分支。

 git branch

输出将使用星号(*)标记当前分支。

重置项目分支

您可以轻松地将当前存储库和工作目录重置为已知状态。git reset命令将把HEAD引用调整为特定的提交,并相应地更新索引以匹配该特定的提交。

 git reset

使用以下命令对您的当前分支执行软重置。

git reset --soft

您也可以以类似方式执行硬重置。只需更换-soft与--hard的选项,如下:

 git reset --hard

添加一个新分支

添加新分支使您可以独立处理较新的功能。您可以使用git branch命令轻松添加分支。只需添加分支名称,如下所示。

 git branch new-branch

通过发出git branch命令来验证添加是否成功。它应该显示新创建的分支,称为new-branch。但是,您不能使用相同的分支名称添加多个分支。它将导致致命错误。

在分支之间切换

您可以使用checkout命令非常轻松地在项目的各个分支之间切换。它是您在软件开发期间最常用的git命令之一。快速浏览下一个示例,以了解其工作原理。

 git checkout new-branch

此命令将通知您分支已成功切换。您也可以使用前面显示的git branch命令来验证这一点。

删除项目分支

成功开发新功能后,您希望它们添加到git master分支中。完成此操作后,您可以完全删除该分支。git命令的-D选项使我们可以很容易地做到这一点。

 git checkout master
#切换到分支 'master'
git branch -D new-branch
#已删除分支 new-branch。

您需要先离开分支才能成功删除它。否则git会抛出错误。

检查提交,树和文件之间的差异

git diff命令允许我们在提交之间以及在blob对象之间查看两个多个文件(工作树和索引树)的更改。它是用于跟踪代码库更改的最基本的git命令之一。

git diff
git diff new-branch master

第一个示例将显示工作树和索引树之间的更改。第二个示例将显示master分支和new-branch分支之间的更改。

合并两个分支

您可以使用git merge命令轻松合并两个不同的开发分支。它将两个分支合并为一个统一分支。您可以将git merge命令用于多种用途。看下面的例子,看看如何使用它们。

git merge fixes new-branch
git merge -s ours obsolete
git merge --no-commit main

第一个示例合并两个分支的新功能并进行修复以创建一个分支。第二个示例使用我们的策略将obsolete分支合并到当前开发分支。最后一个示例将分支main合并到当前分支,但禁用自动提交。

还原现有提交

有时,您可能会决定不再需要某些提交。在这种情况下,还原这些提交比完全修改分支更好。git revert命令可以让我们做到这一点。

git revert 482b4bebada278b29001338411de7c42743065d5

git revert HEAD~3

第一个示例将还原由提交ID 482b4bebada278b29001338411de7c42743065d5引入的更改。第二个示例使HEAD中的第四个最后提交重复执行,并执行一个新的提交。

隐藏工作目录

您可以将工作目录的当前状态临时保存到某个地方,并在以后需要时返回到该目录。这在git术语中称为隐藏。它只是存储工作目录的状态和索引,以便您可以处理新内容。

git stash

当陷入混乱情况时,开发人员通常使用此命令。它允许他们存储不整洁的工作流程,并稍后再解决。使用存储列表命令查看存储列表。

git stash list

克隆仓库

关于开源的最好的事情之一就是您可以像对待他人的代码一样使用他人的代码。Git使使用git clone命令下载现有项目变得容易。看下面的插图,看看它在现实生活中是如何工作的。

git clone GIT:URL

提取新更新

现实生活中的项目一直在发展。假设您在前面从远程存储库中克隆了一个repo。当开发人员将新特性更新到存储库时,您将做什么?将相同的repo一遍又一遍地克隆到本地机器中是不方便的。git pull命令可以避免这种情况。

git pull

此命令将使用协作者所做的任何新更新来更新项目的本地版本。切记在获取最新更新之前将工作目录更改为项目目录。

推送您的更新

完成更新的处理后可以通过将其添加到远程存储库中。git push和git commit之间的区别在于,当您提交某些更改时,它们将被添加到本地存储库而不是远程存储库中。

git push

此命令会将您的更新添加到项目的远程存储库。通常,您将使用推拉与远程开发人员进行协作。因此,完美地掌握它们很重要。

显示远程存储库

git remote命令使我们可以从Linux终端方便地管理一组跟踪的存储库。您可以使用它仅克隆某些选定的分支。

git remote
git remote --verbose

第一个示例将显示当前配置的所有远程存储库。添加–verbose标志将向我们显示有关此信息的详细信息。

连接到远程仓库

您可以设置远程仓库,以便将本地仓库连接到远程服务器。这样,您就可以将本地更改直接推送到远程服务器。快速浏览下图,以了解其实际效果。

$ git remote add origin <服务器>

上面的命令会将“ origin”作为远程名称添加到服务器。您可以通过浏览GitHub存储库的Source子选项卡来发现服务器URL 。

将标签添加到您的项目

标签使您可以标记开源项目中的重要事件。开发人员经常使用它们来标记新的复发或错误修复。请仔细查看以下git命令,以了解如何使用git将标签添加到项目中。

 git tag 1.0.0 new-branch

此命令将标签1.0.0添加到特定的提交。您可以使用以下命令获取commit-id。

git log

使用以下命令将标签推送到您的远程仓库中。

 git push origin --tags

您需要明确指定--tags选项。否则,标签只会添加到您的本地仓库中,而不会添加到远程仓库中。

获取远程数据

您将经常使用的另一个常见git命令是fetch。由于许多原因,它非常有用。首先,访存仅检索新数据/引用,而不将它们合并到本地分支。因此,您可以放心,本地仓库的工作副本将保持安全可靠。

git fetch origin

这是检查远程代码库最新进度而又不破坏项目自己版本的绝佳方法。一旦确定所有新数据都可以使用,只需将它们合并到本地分支即可。

恢复未提交的更改

git restore命令允许开发人员恢复其项目中所有未提交的更改。这些是您对项目的工作版本或本地索引中的内容所做的更改。您可以使用此命令来还原工作副本中的更改或索引中的更改,或者同时执行这两个操作。

git restore --staged gittest.py
git restore --source=HEAD --staged --worktree gittest.py

第一个命令将还原索引中的文件gittest.py,第二个命令将还原索引和项目的当前工作目录。

删除文件

有时,您可能希望从工作树或项目索引中完全删除一些文件。您可以使用git rm命令来执行此操作。但是,此命令不会从您的工作目录中删除指定的文件。使用Linux rm命令执行此操作。

$ git rm *.py
$ git rm -r dir/
$ git rm --cached *.py

第一条命令从工作树和索引中删除所有py文件。第二个命令从dir/目录中删除所有内容。最后一条命令将仅从索引而不是工作树中删除所有py文件。

移动或重命名文件

您可以使用git移动或重命名文件,就像使用Linux mv命令一样。

git mv gittest.py gittest1.py

上面的命令只是执行以下Linux操作。

$ mv test.py new-test.py
$ git add new-test.py
$ rm test.py

因此,您可以使用git mv命令来避免输入大量额外的Linux终端命令。

清理未跟踪的文件

未跟踪的文件是不在git版本控制系统下的文件。在进行大型项目时,您经常会偶然发现此类文件。您可以使用几种方法删除它们,包括git reset和git checkout。但是,使用git clean命令是最合适的方法。

git clean

fatal: clean.requireForce 默认为 true 且未提供 -i、-n 或 -f 选项,拒绝执行清理动作

上面的命令失败,因为这是在我的系统中配置git的方式。您可以通过添加-n,-i或-f选项来解决此问题。

git clean -n

优化本地仓库

我最喜欢的git命令之一是gc。它用于垃圾收集,将帮助您减小本地仓库的大小。如果您正在处理大量项目,则应经常使用此命令。

$ git gc
枚举对象: 10, 完成.
对象计数中: 100% (10/10), 完成.
压缩对象中: 100% (10/10), 完成.
写入对象中: 100% (10/10), 完成.
总共 10 (差异 0),复用 0 (差异 0)

git gc命令运行得非常快,并清理了本地仓库中所有不必要的文件。由于其速度和效率,它是最佳的优化方法之一。您也可以使用–aggressive选项来增加优化。但是,这将需要更多时间才能完成。

存档本地仓库

您可以使用git archive命令轻松地归档本地仓库。它允许开发人员将他们的项目安全地存储在某个地方。您可以通过网络传输此存档,也可以将其存储在Linux文件系统上。

git archive --output=test --format=tar master

上面的命令将仓库存储在名为test的tar文件中。如果需要,可以省略–format选项。在这种情况下,git将尝试从名称中推断出存档格式。此命令还有更多选项可用。

搜索模式

在大型项目中工作时,通常需要搜索其他内容。幸运的是,git grep命令使我们能够在仓库中搜索特定的模式,并使开发更加容易。它的工作方式与标准Linux grep命令非常相似,具有一些特定于git的功能。

 git grep -iw 'import' master

此命令在我们的master分支中显示所有包含“ import”的行。它以不区分大小写的方式搜索。以下命令将在所有提交和分支中搜索给定的模式。

git grep 'import' $(git rev-list --all)

如果您正在协作大型项目,这是最好的git命令之一。

管理工作树

开发人员可以在git中使用多个工作树。当签出多个项目分支时,这很有用。检查以下git命令,以了解如何在git中管理工作树。

 git worktree list
 git worktree add new-branch
 git worktree remove new-branch
 git worktree prune

您可以使用第一个命令显示当前的工作树。使用第二个命令添加一个新的“链接的工作树”,并使用第三个命令删除该树。最后一条命令允许您修剪工作树信息。

删除未跟踪的对象

有时您可能想删除不再由git跟踪的对象。Git提供了一个简单的命令来执行此操作。git prune命令只会从对象数据库中删除未跟踪的对象,而不会删除引用本身。

 git prune --dry-run
 git prune --verbose --progress

第一条命令不会删除任何内容,只会显示修剪后会删除的对象。第二条命令在删除期间提供详细的输出以及进度报告。您可以使用prune命令和git gc命令一起优化仓库。

打包未归档文件

在git中,包是单个压缩对象的集合。Git对这些对象应用增量压缩并将其存储在单个文件中。它们用于减少Linux文件系统或镜像系统上的负载。git repack命令允许用户创建新的包,这些包由不位于现有包内的对象组成。

git repack

您可以将此命令与gic gc和git prune一起使用,以优化git仓库。

计算解包的对象数量

除非解压缩的对象太多,否则不应经常重新打包对象。git count-objects命令是一种简单但有用的方法,用于查看解包对象的数量及其消耗的磁盘空间。

 git count-objects

使用上面的命令来确定是否应该重新打包git。您可以添加–verbose标志以获取详细信息,还可以添加–人类可读标志以常规方式显示尺寸。

验证对象数据库

Git最初是作为文件系统开发的。它具有一个称为fsck的有用命令,其作用与Unix fsck非常相似。您可以使用此命令来验证连接性并执行对象的完整性检查。

 git fsck

运行以上命令将显示在对象数据库中找到的所有损坏的对象。它是查找丢失或不良对象的最有用的git命令之一。

显示每次提交的更改

git whatchanged命令是我们最喜欢的git子命令中的另一个。这是一种查看每个git commit引入到我们项目的更改的简单但有效的方法。

git whatchanged

此git命令将使用提交日志和diff输出显示信息。总的来说,它的操作与git log命令非常相似。

汇总日志信息

您还可以使用git shortlog命令查看历史记录。该命令的主要思想是将输出包含在发行公告中。快速浏览以下命令以了解其工作原理。

 git shortlog
 git shortlog --email --summary

添加–email选项将显示每个作者的电子邮件。该-summary选项会抑制通常输出,只会显示提交的数目。

管理配置选项

git有大量可用的配置选项。您可以使用git config命令查询,设置或替换各种选项。可以对特定仓库和全局配置进行更改。

git config --list

40个适用于Linux管理员和开发人员的git命令(下)

上面的命令将在git中列出所有当前设置的配置选项。您可以轻松添加或删除新选项。遵循config子命令的帮助页面以了解如何执行这些任务。

 git config --help

Git帮助

git或任何其他Linux终端命令的帮助页面提供了所有可用选项的摘要信息。当您遇到git问题时,它应该是第一个访问的地方。快速浏览以下命令以了解如何调用git帮助页面。

git help
git --help

因此,您可以使用Unix风格的–help选项或git中内置的help子命令来查询git帮助页面。此外,git还提供了有关子命令的帮助页面。

git <command> --help
git commit --help

手册页

手册页包含有关git版本控制系统及其所有子命令的深入信息。您可以按照以下语法查看它们。

 man git
man git commit

因此,您也可以像使用帮助页面一样查看各个子命令的手册。

显示版本信息

您可以使用以下简单命令查看系统上已安装的git版本。由于git在很大程度上随着时间的推移而发展,因此各种git版本之间存在显着差异。

 git --version

只需使用以上命令即可在您的计算机上获取特定版本的git。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 基础命令 用户设置 初始化仓库 把文件添加到仓库 把文件提交到仓库 添加文件到Git仓库 分两步: 第一步,使用命...
    前端渣渣阅读 1,447评论 0 20
  • 简介   git有四个工作区域,分别是:工作目录(Workspace)、暂存区(Index/Stage)、本地仓库...
    gybguohao阅读 21,025评论 4 21
  • git常用命令总结[https://www.cnblogs.com/fanyegong/p/5127780.htm...
    G__yuan阅读 776评论 0 2
  • 想要学会使用Git,首先需要理解什么是分布式版本库,什么是工作区和暂存区,这几个概念是理解很多命令的基础。强烈推荐...
    DevelopMyLife阅读 1,480评论 0 1
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,485评论 16 22