版本说明:本文最后更新于
2023-09-15
,详细更新记录参见文末表格。若链接或图片失效,对文中内容有任何疑义和勘误意见,欢迎留言反馈。
精选程度:★★★★★ | 博文状态:已完结 | 本地标签:是
Git笔记
本文是关于Git
的使用方法笔记。git
是一个开源的分布式版本控制系统,也是目前最普遍使用的版本控制系统,次之的主流版本管理系统还有SVN
。
尤其是协同开发的时候,开发者共同开发一个项目,每个人分别写不同的代码,然后把代码汇总到一起,并且相互需要彼此写的代码。这就需要版本控制系统,把大家写的代码存储到一个地方进行统一管理。
〇、相关教程
【Git官网链接】https://git-scm.com/
【Git官方文档】https://git-scm.com/docs
【Git教程 | 菜鸟教程】(推荐)https://www.runoob.com/git/git-tutorial.html
【Git教程 | 莫烦Python】(不推荐)https://mofanpy.com/tutorials/others/git/
一、Git下载安装
1.1、Git下载安装
Git
在Linux/Unix
、Mac
和Windows
平台上均支持运行。
官网下载git
安装包:https://git-scm.com/download/win
【注意】点击安装后会跳转到github
相应库中下载,可能需要VPN
连接。
双击安装,按照默认选项,直接一直点击下一步,安装完毕即可。
通过git version
命令可以查看当前安装的git
版本。
1.2、Git配置
Git
提供了一个叫做git config
的工具,专门用来配置或读取相应的工作环境变量。
它们可能存放在以下三个不同的地方:
-
/etc/gitconfig
文件:系统中对所有用户都普遍适用的配置。若使用git config
时用--system
选项,读写的就是这个文件。 -
~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用git config
时用--global
选项,读写的就是这个文件。 -
当前项目的
Git
目录中的配置文件(也就是工作目录中的.git/config
文件):这里的配置仅仅针对当前项目有效。
【注】每一个级别的配置都会覆盖上层的相同配置,例如
.git/config
里的配置会覆盖/etc/gitconfig
中的同名变量。
在 Windows 系统上,可以看到配置文件在如下位置。
1.2.1、用户信息配置
配置个人的用户名称和电子邮件地址。
git config --global user.name "Nicholas Cool"
git config --global user.email "nico@email.com"
git config user.name # 查看当前用户名
git config user.email # 查看当前用户邮箱
【注】如果用了**--global
**选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉--global
选项重新配置即可,新的设定保存在当前项目的.git/config
文件里。
1.2.2、查看配置信息
要检查已有的配置信息,可以使用 git config --list
命令。
git config --list
1.2.3、编辑配置文件
git config -e # 针对当前仓库
git config -e --global # 针对当前用户所有仓库
git config -e --system # 针对系统上所有仓库
二、Git基础概念
先来理解下Git
工作区、版本库和暂存区概念:
- 工作区: 就是你在电脑里能看到的目录。
- 版本库: 工作区有一个隐藏目录
.git
,这个不算工作区,而是Git
的版本库。 - 暂存区: 英文叫
stage
或index
。一般存放在**.git
**目录下的index
文件(.git/index
)中,所以我们把暂存区有时也叫作索引(index
)。
对于该图的解释(部分解释请先阅读后续内容):
- 标记为"
master
" 的是master
分支所代表的目录树,此时 "HEAD
" 实际是指向master
分支的一个"游标"。所以图示的命令中出现HEAD
的地方可以用master
来替换。 - 图中的
objects
标识的区域为Git
的对象库,实际位于 ".git/objects
" 目录下,里面包含了创建的各种对象及内容。 - 当对工作区修改(或新增)的文件执行
git add
命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID
被记录在暂存区的文件索引中。 - 当执行提交操作**
git commit
**时,暂存区的目录树写到版本库(对象库)中,master
分支会做相应的更新。即master
指向的目录树就是提交时暂存区的目录树。 - 当执行**
git reset HEAD
**命令时,暂存区的目录树会被重写,被master
分支指向的目录树所替换,但是工作区不受影响。 - 当执行**
git rm --cached <file>
**命令时,会直接从暂存区删除文件,工作区则不做出改变。 - 当执行**
git checkout .
** 或者**git checkout -- <file>
**命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。 - 当执行
git checkout HEAD .
或者git checkout HEAD <file>
命令时,会用HEAD
指向的master
分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
三、Git工作流程
Git
的工作就是创建和保存你项目的快照及与之后的快照进行对比。
workspace
:工作区staging area
:暂存区/缓存区local repository
:版本库或本地仓库remote repository
:远程仓库
3.1、创建仓库
3.1.1、git init
命令
Git
使用**git init
命令来初始化一个Git
仓库。Git
的很多命令都需要在Git
的仓库中运行,所以git init
**是使用Git
的第一个命令。
git init # 初始化当前目录为 Git 仓库
git init newrepo # 初始化指定目录为 Git 仓库
初始化后,会在目标仓库下生成一个名为.git
的目录,该目录包含了Git
需要的资源的所有元数据,其他的项目目录保持不变。
3.1.2、git clone
命令
使用**git clone
**从现有的远程Git
仓库中拷贝项目(包括所有分支和历史记录等)。
git clone <repo_url> # 克隆Git仓库
git clone <repo_url> <directory> # 克隆Git仓库到指定的目录
在已有项目的基础上做修改,一般流程如下。
- 克隆
Git
资源作为工作目录。 - 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改和提交。
例如,要克隆Ruby
语言的Git
代码仓库Grit
,并设置新建的项目目录名称为mygrit
。可以用下面的命令:
git clone git://github.com/schacon/grit.git mygrit
# 如果使用git协议无法连接,可以换成https协议
git clone https://github.com/schacon/grit.git mygrit
3.2、基本操作
3.2.1、git add
命令
**git add
**命令可将该文件的修改添加到暂存区。
通过运行**git add
**命令,你可以告诉Git
哪些文件的修改应该包含在下一次提交(commit
)中。
git add [file1] [file2] ... # 添加一个或多个文件到暂存区
git add [dir] # 添加指定目录到暂存区,包括子目录
git add . # 添加当前目录下的所有文件到暂存区
例如添加demo.py
文件。
通过git status
命令查看当前仓库的状态。此时可以看到demo.py
属于**Untracked状态**。
通过git add demo.py
命令将该文件添加到git
管理中。再次查看当前仓库状态。
3.2.2、git status
命令
**git status
**是一个用于查看Git
仓库当前状态的命令。
**git status
**命令会列出所有新增或修改过的文件,可以查看在上次提交之后是否有对文件进行再次修改。
git status
命令会显示以下信息:
- 当前分支的名称。
- 当前分支与远程分支的关系(例如,是否是最新的)。
- 未暂存的修改:显示已修改但尚未使用
git add
添加到暂存区的文件列表。- 未跟踪的文件:显示尚未纳入版本控制的新文件列表。
上述初步使用了git status
命令。也可以使用-s
参数查看简略信息。
例如,下图所示信息表明:
- 文件
demo.py
的修改已经add
到了暂存区。 - 文件
tool.py
的修改在上次add
到缓存区后又有改动。 - 文件
readme.md
暂未仍处于untracked
状态。
全部再次add
到缓存区,再次检查结果如下。
删除tool.py
文件,查看status
结果如下。
再次更新到缓存区,最终显示结果如下。
3.2.3、git diff
命令
git diff
命令比较文件的不同,即比较文件在工作区和暂存区的差异。
- 尚未缓存的改动(暂存区和工作区的差异):
git diff [file]
- 查看已缓存的改动(暂存区和上一次
commit
的差异):git diff --cached
/git diff --staged
- 查看已缓存的与未缓存的所有改动(工作区和上一次
commit
的差异):git diff HEAD
- 显示摘要而非整个
diff
:命令最后添加**--stat
**参数 - 显示两个
commit
之间的差异:git diff <commit1> <commit2>
,即如何从commit1
变化到commit2
- 查看当前工作目录与某个特定提交之间的差异:
git diff <commit>
,此命令以指定的<commit>
作为基准。
【注】Untracked
状态的文件不会显示在diff
结果中。
首先对demo.py
和readme.py
文件均做出修改。通过git diff
查看差异。
将修改add
到缓存区后,通过git diff --cached
查看暂存区和上次commit
差异。
通过git commit -m "first commit"
提交后,再次查看差异,发现没有了。
3.2.4、git commit
命令
git commit
命令将暂存区内容添加到本地仓库中。
# 提交暂存区的全部文件到本地仓库
git commit -m "[descriptive message]"
# 提交暂存区的指定文件到本地仓库
git commit [file1] [file2] ... -m "[descriptive message]"
【注】**-a
**参数设置修改文件后不需要执行git add
命令,直接来提交(将工作区提交到本地仓库,但注意不包含Untracked
文件)。
git commit -am "[descriptive message]"
如果你没有设置
-m
选项,Git
会尝试为你打开一个编辑器以填写提交信息。 如果Git
在你对它的配置中找不到相关信息,默认会打开vim
。
此时再执行git status
,以下输出说明我们在最近一次提交之后,没有做任何改动,是一个 "working directory clean
",即干净的工作目录。
通过git log
命令可以查看各次提交的日志信息。
通过
git commit --amend --no-edit
可以将当前的修改文件并入到上一个Commit
中而不是新开一个Commit
。
3.2.5、git reset
命令
git reset
命令用于将仓库中的HEAD
和分支引用移动到不同的位置。这个命令通常用于撤销之前的提交、取消已经暂存的更改或者重新设置工作目录和暂存区状态。
git reset [--soft | --mixed | --hard] <commit>
**--mixed
**为默认,可以不用带该参数。这个命令会将HEAD
指针和当前分支的引用移到指定的提交(commit
),并且会重置暂存区,但不会更改工作目录的内容。这样,之前的add
的更改会被取消暂存,需要重新添加到暂存区,然后再提交。
git reset --mixed <commit>
# 举例如下
git reset HEAD # 取消已缓存的内容
git reset HEAD^ # 回退所有内容到上一个版本
git reset 26c8a81 # 回退到指定版本
--soft
参数,这个命令会将HEAD
指针和当前分支的引用移到指定的提交(commit
),但不会更改工作目录或索引(暂存区)的内容。这意味着之前提交到暂存区的更改会保存。
git reset --soft <commit>
# 举例如下
git reset --soft HEAD~3 # 回退上3个版本
--hard
参数,这个命令会将HEAD
指针和当前分支的引用移到指定的提交(commit
),并且会重置暂存区和工作目录的内容,使它们与指定提交的内容完全一致。这个命令会永久丢失工作目录中未提交的更改,慎用。
git reset --hard <commit>
# 举例如下
git reset --hard HEAD~3 # 回退上3个版本
git reset –-hard 26c8a81 # 回退到某个特定提交
git reset --hard origin/master # 将本地的状态回退到和远程的一样
如果你只想回退暂存区中特定文件到某个commit的状态,可以使用这个命令。它将指定文件从暂存区移除,但保留工作目录中的更改,让你可以重新暂存它们或者撤销它们。
git reset <commit> <file>
# 举例如下
git reset HEAD hello.php # 取消 hello.php 文件暂存区的内容
git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
HEAD 说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本,以此类推...
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD^2 上上一个版本,以此类推...
例如,修改12.txt
和demo.py
文件。
使用git reset HEAD
后,即取消了缓存区的内容。
3.2.6、git rm
命令
git rm
命令用于删除文件。
git rm <file> # 将文件从暂存区和工作区中删除(相当于手工删除后,git add <file>)
# 如果删除之前修改过并且已经放到暂存区域的话,则需要用强制删除选项 -f
git rm -f <file>
如果想把文件从暂存区
域移除,但仍然希望保留在当前工作目录
中,换句话说,仅是从跟踪清单中删除,使用 --cached
选项即可(相应文件会变成Untracked
状态):
git rm --cached <file>
可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件。
git rm -r <folder> # 递归删除
git rm -r * # 删除当前目录下的所有文件和子目录
3.2.7、git mv
命令
git mv
命令用于移动或重命名一个文件、目录或软连接。
git mv [file] [newfile]
# 如果新文件名已经存在,但还是要覆盖它,可以使用 -f 参数
git mv -f [file] [newfile]
3.4、提交日志
Git 提交历史一般常用两个命令:
git log
:查看历史提交记录。git blame <file>
:以列表形式查看指定文件的历史修改记录。
3.4.1、git log
命令
在使用Git
提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用**git log
**命令查看。
**git log
**命令用于查看Git
仓库中提交历史记录。
git log
显示了从最新提交到最早提交的所有提交信息,包括提交的哈希值、作者、提交日期和提交消息等。
git log [选项] [分支名/提交哈希]
常用的选项包括:
-p
:显示提交的补丁(具体更改内容)。--oneline
:以简洁的一行格式显示提交信息。--reverse
:逆向的顺序输出。--graph
:以图形化方式显示分支和合并历史。--decorate
:显示分支和标签指向的提交。--author=<作者>
:只显示特定作者的提交。--since=<时间>
:只显示指定时间之后的提交。--until=<时间>
:只显示指定时间之前的提交。--grep=<模式>
:只显示包含指定模式的提交消息。--no-merges
:不显示合并提交。--stat
:显示简略统计信息,包括修改的文件和行数。--abbrev-commit
:使用短提交哈希值。--pretty=<格式>
:使用自定义的提交信息显示格式。-<数字>
:限制显示的提交信息条数。
使用git log
命令示例输出如下。
我们可以用 --oneline
选项来查看历史记录的简洁的版本。
我们可以用 --graph
选项,查看历史中什么时候出现了分支、合并。现在我们可以更清楚明了地看到何时工作分叉、又何时归并。
我们可以用 --reverse
参数来逆向显示所有日志。
如果只想查找指定用户的提交日志可以使用命令:git log --author
。 例如,比方说我们要找Git
源码中Nicholas Cool
提交的部分:
git log --author="Nicholas Cool" --oneline
如果要指定日期,可以执行几个选项:--since
和 --until
,也可以用--before
和--after
。
# 查看 Git 项目中 1 天前其在 9月11日之后 的所有提交
git log --before={1.days.ago} --after={2023-09-11}
3.4.2、git blame
命令
**git blame
**命令用于逐行显示指定文件的每一行代码是由谁在什么时候引入或修改的。
**git blame
**可以追踪文件中每一行的变更历史,包括作者、提交哈希、提交日期和提交消息等信息。
如果要查看指定文件的修改记录可以使用 git blame
命令,格式如下:
git blame [选项] <文件路径>
-
常用的选项包括:
-
-L <起始行号>,<结束行号>
:只显示指定行号范围内的代码注释。 -
-C
:对于重命名或拷贝的代码行,也进行代码行溯源。 -
-M
:对于移动的代码行,也进行代码行溯源。 -
-C -C
或-M -M
:对于较多改动的代码行,进行更进一步的溯源。 -
--show-stats
:显示包含每个作者的行数统计信息。
使用git blame
命令示例输出如下。
只显示指定行号范围内的代码注释:
git blame -L <起始行号>,<结束行号> <文件路径>
3.4.3、git show
命令
git show
命令用于显示Git
仓库中的提交(commit)或对象(object)的详细信息,包括提交的元数据和更改的内容。该命令通常用于查看特定提交的详细信息。
以下是 git show
命令的基本用法:
git show <commit>
其中 <commit>
是要查看的提交的标识符,可以是提交的哈希值、分支名、标签名等。
3.3、分支管理
几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。
使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
有人把Git
的分支模型称为必杀技特性,而正是因为它,将Git从版本控制系统家族里区分出来。
当你切换分支的时候,Git
会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。
3.3.1、git branch
命令
git branch
命令可用于查看可用的分支和标签,创建分支等。
1、查看可用分支和标签:
以下命令可以让你列出可用的本地分支和标签,以便快速选择要切换的目标:
git branch
2、创建分支:
git branch <branchname>
3、删除分支:
注意需要不在此分区下时,才能执行删除操作。
git branch -d <branchname>
3.3.2、git checkout
命令
**git checkout
**命令用于在不同的分支之间切换、恢复文件、创建新分支等操作。
注意:
git checkout
命令在Git 2.23
版本后引入了git switch和git restore命令,分别用于分支切换和文件恢复,以提供更清晰的语义和错误检查。如果你使用较新的Git
版本,可以考虑使用这些命令代替git checkout
。
1、切换分支:
以下命令允许你从当前分支切换到指定的分支<branch-name>
:
git checkout <branch-name>
# 例如将工作目录切换到主分支
git checkout master
2、创建新分支并切换:
以下命令用于创建一个新分支<new-branch-name>
并立即切换到新创建的分支:
git checkout -b <new-branch-name>
# 例如创建一个名为 feature-branch 的新分支并切换到它
git checkout -b feature-branch
3、切换到前一个分支:
以下命令可以让你快速切换回前一个分支,无需记住分支名称:
git checkout -
4、切换到标签:
如果你有一个标签<tag-name>
,你可以使用这个命令来切换到该标签所指向的提交状态。
git checkout tags/<tag-name>
5、检出文件:
以下命令可以将指定文件<file>
恢复到最新的提交状态,丢弃所有未提交的更改,这对于撤销不需要的更改非常有用:
git checkout -- <file>
6、切换到特定提交:
你可以使用提交的哈希值<commit-hash>
来切换到特定的提交状态。这将使你进入"分离头指针"状态,只能查看历史记录,而不能进行分支操作。通常情况下,不建议在分离头指针状态下工作,因为更改可能会丢失。
git checkout <commit-hash>
如下示例所示。
使用git checkout [commit-id] -- demo.py
可以让单个文件返回某个commit
的状态。
例如使用如下操作,此时会发现demo.py
的内容已经改变到4560d7e
的commit
状态下了。
3.3.3、git switch
命令(Git 2.23引入)
**git switch
**命令用于更清晰地切换分支。
**git switch
**命令作用与git checkout
类似,但提供了更清晰的语义和错误检查。
与
git checkout
不同,git switch
更容易理解和使用,因为它专注于分支切换的操作,此外,git switch
还提供了更好的错误检查,可以避免一些常见的错误操作。注意:
git switch
是Git 2.23
版本引入的一个新命令,如果你使用的是Git
的旧版本,可能无法使用git switch
命令,但你仍然可以使用git checkout
进行相同的操作。
1、切换分支:
以下命令允许你从当前分支切换到指定的分支<branch-name>
:
git switch <branch-name>
# 例如将工作目录切换到主分支
git switch master
2、创建新分支并切换:
如果你想同时创建一个新分支并切换到该分支,可以在**git switch
命令后面加上-c
或--create
**选项,然后指定分支名称。
以下命令用于创建一个新分支 <new-branch-name>
并立即切换到新创建的分支:
git switch -c <new-branch-name>
# 例如创建一个名为 feature-branch 的新分支并切换到它
git switch -c feature-branch
3、切换到前一个分支:
以下命令可以让你快速切换回前一个分支,无需记住分支名称:
git switch -
4、切换到标签:
如果你有一个标签<tag-name>
,你可以使用这个命令来切换到该标签所指向的提交状态:
git switch tags/<tag-name>
3.3.4、git restore
命令(Git 2.23引入)
**git restore
**命令用于恢复或撤销文件的更改。
**git restore
**命令作用包括还原文件到最新提交的状态、丢弃未暂存的更改、丢弃已暂存但未提交的更改等。
git restore
的目标是提供一种更直观、易于理解的方式来管理文件的状态,它的引入使得Git
用户能够更容易地处理不同阶段的更改,从而提高了工作流的效率。注意:
git restore
是Git 2.23
版本引入的一个命令,如果你使用的是较早版本的Git
,可能无法使用git restore
命令,但你仍然可以使用git checkout
等命令来进行类似的操作。
1、还原文件到最新提交的状态
以下命令可以将指定文件<file>
恢复到最新的提交状态,丢弃所有未提交的更改:
git restore <file>
这个命令对于撤销不需要的更改非常有用。
2、还原文件到暂存区的状态
如果你已经使用git add
将文件添加到暂存区,但希望撤销这些更改,可以使用这个命令:
git restore --staged <file>
以上命令将文件<file>
恢复到暂存区的状态,但不影响工作目录中的文件。
3、还原全部更改
以下命令将还原所有未提交的更改,包括工作目录和暂存区的更改:
git restore .
使用这个命令要谨慎,因为它会清除所有未提交的修改。
4、还原文件到指定提交的状态
如果你想将文件<file>
恢复到特定提交 <commit>
的状态,可以使用以下命令:
git restore --source=<commit> <file>
这个命令在需要查看历史状态或将文件还原到历史版本时非常有用。
5、交互式还原:
以下命令允许你以交互方式选择要还原或保留的更改:
git restore -i
执行这个命令它会打开一个交互式界面,让你选择如何处理每个更改。
3.3.2、git merge
命令
git merge
命令用于合并分支。
一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用git merge
命令将任何分支合并到当前分支中去。
首先新建一个仓库,用于演示分支操作。
此时通过git branch
命令查看,只有master
分支,且当前位于master
分支。再次在此分支上进行两次新的提交。
创建一个分支testing
。
git branch testing
在当前分支新建一个文件test.txt
。
查看此时的提交(commit
)记录图。可以看到master
分支的指针和testing
分支的指针。
我们用 git checkout (branch)
切换到我们要修改的分支。此时会发现test.txt
文件已经消失了,因为回到了testing
分支的commit
的状态。
git checkout testing
在testing
分支下提交两次新的commit
。
我们也可以使用 git checkout -b (branchname)
命令来创建新分支并立即切换到该分支下,从而在该分支中操作。
git checkout -b newtest
此时查看git log --graph
,可以看到当前的完整路径。并且路径上有两个commit
分别是testing
分支和newtest
分支的最后提交。
分支合并
此时尝试将newtest
分支合并到主分支。
再次查看当前的提交历史图,如下图所示。
合并完就可以删除分支了。实际上,可以看出,删除分支只是删除了指向该分支最后一次提交的指针,并没有删除提交的历史记录。
合并冲突
合并并不仅仅是简单的文件添加、移除的操作,Git
也会合并修改。
首先创建分支conflict
,并切换到该分支。
新增一个conflict.txt
文件。
切换回master
分支,也新建一个conflict.txt
文件,但内容不同,提交修改。
此时尝试将conflict
分支合并过来。
打开文件,发现conflict.txt
文件已经变成如下所示。
手动处理冲突文件后,使用git add
命令告诉Git
文件冲突已解决。
查看此时的提交历史图,如下所示。
3.4、Git标签
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用git tag
给它打上标签。
比如说,我们想为我们的项目发布一个"1.0"版本。 我们可以用 git tag -a v1.0
命令给最新一次提交(HEAD)打上v1.0
的标签。
-a
选项意为"创建一个带注解的标签"。 不用-a
选项也可以执行的,但它不会记录这标签是啥时候打的、谁打的,也不会让你添加标签的注解。 推荐一直创建带注解的标签。
git tag -a v1.0
当你执行git tag -a
命令时,Git
会打开你的编辑器,让你写一句标签注解,就像你给提交写注解一样。或者使用下面的命令:
git tag -a v1.0 -m "first tag for demo"
此时可以看到标签的信息。
如果我们忘了给某个提交打标签,又将它发布了,我们可以给它追加标签。
例如,假设在上述实例中,我们发布了提交01fc424
,但是那时候忘了给它打标签。 我们现在也可以:
git tag -a v0.2 -m "add the tag" 01fc424
通过git tag
命令可以查看所有的标签。
3.5、.gitignore
文件
按照如下格式编写.gitignore
文件,可以保持相应文件Untracked
状态。
logs/
*.notes
pattern*/
3.6、远程仓库
Git
并不像SVN
那样有个中心服务器。
目前我们使用到的Git
命令都是在本地执行,如果你想通过Git
分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上。例如使用Github
或者Gitee
作为远程仓库。
3.6.1、git remote
命令
**git remote
**命令用于用于管理 Git 仓库中的远程仓库。
**git remote
**命令提供了一些用于查看、添加、重命名和删除远程仓库的功能。
以下是git remote
命令的常见用法:
git remote
:列出当前仓库中已配置的远程仓库。git remote -v
:列出当前仓库中已配置的远程仓库,并显示它们的URL。git remote add <remote_name> <remote_url>
:添加一个新的远程仓库。指定一个远程仓库的名称和URL,将其添加到当前仓库中。git remote rename <old_name> <new_name>
:将已配置的远程仓库重命名。git remote remove <remote_name>
:从当前仓库中删除指定的远程仓库。git remote rm <remote_name>
:从当前仓库中删除指定的远程仓库。git remote set-url <remote_name> <new_url>
:修改指定远程仓库的URL。git remote show <remote_name>
:显示指定远程仓库的详细信息,包括URL和跟踪分支。
**git remote -v
**可以查看当前仓库中配置的远程仓库列表以及它们的 URL。可以看到此时还没有配置任何远程仓库。
我们从远程克隆一个Git
仓库,查看其信息。其中,origin为远程地址的别名。
通过git remote show
命令显示某个远程仓库的信息:
git remote show https://github.com/tianqixin/runoob-git-test
添加远程版本库:
git remote add <alias> <remote_url>
<alias>
:要添加的远程仓库的名称。通常,远程仓库的名称为origin
,但你也可以自定义一个名称。<remote_url>
:远程仓库的 URL。它可以是一个指向远程 Git 仓库的HTTPS
、SSH
或Git
协议链接。
添加远程仓库后,你就可以使用其他Git
命令与远程仓库进行交互,例如推送本地代码到远程仓库、拉取远程仓库的代码等。
3.6.2、git fetch
命令
**git fetch
**命令用于从远程获取代码库。该命令执行完后需要执行git merge
远程分支到你所在的分支。
git fetch [<远程仓库>] [<远程分支名>]
假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行**git fetch [alias]
告诉Git
去获取它有你没有的数据,然后你可以执行git merge [alias]/[branch]
**将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。
例如,在Github
上点击" README.md
" 并在线修改它。
然后在本地更新修改。
$ git fetch origin
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:tianqixin/runoob-git-test
0205aab..febd8ed master -> origin/master
以上信息"0205aab..febd8ed master -> origin/master
" 说明master
分支已被更新,可以使用以下命令将更新同步到本地:
$ git merge origin/master
Updating 0205aab..febd8ed
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
再次查看本地的README.md
文件,会发现已经更新了修改。
3.6.3、git pull
命令
**git pull
**命令用于从远程获取代码并合并本地的版本。
**git pull
其实就是同时实现了git fetch
和git merge FETCH_HEAD
**的功能。
git pull [<远程仓库>] [<远程分支名>:<本地分支名>]
例如:
# 获取 origin/master 分支,再与本地的 brantest 分支合并
git pull origin master:brantest
# 获取 origin/master 分支,再与本地的 master 分支合并
git pull origin master
3.6.4、git push
命令
git push
命令用于从将本地的分支版本上传到远程并合并。
git push <远程仓库> <本地分支名>:<远程分支名>
# 如果本地分支名与远程分支名相同,则可以省略远程分支名
git push <远程仓库> <本地分支名>
举例如下:
# 将本地的 master 分支推送到 origin 主机的 master 分支
git push origin master
# 相等于
git push origin master:master
如果本地版本与远程版本有差异,但又要强制推送可以使用--force
参数:
git push --force origin master
删除主机的分支可以使用--delete
参数,以下命令表示删除origin
主机的master
分支。
git push origin --delete master
四、更多命令
4.1、统计commit
总数
git rev-list --all --count
Q & A
暂无
更新记录
时间 | 修改内容 |
---|---|
2023-09-15 | 首次发布版本 |
评论区