可以先阅读Git的初次使用。
1.在已存在目录中初始化仓库
Git第一步:git init
。该命令是在一个目录中创建一个新的Git仓库。
2.克隆现有的仓库
# 例如 git clone https://github.com/vuejs/vue
$ git clone <url>
# 自定义本地仓库的名字
$ git clone <url> [newname]
Git支持多种数据传输协议:http://
、git://
或者SSH
。
默认情况下,Git会将远程仓库设置为名为origin
的远程仓库,并且会自动将您克隆的默认分支(通常是master
或main
)设置为当前工作分支。
初次克隆的仓库的工作目录下的所有文件都属于已跟踪文件,并处于未修改状态。
一.检查当前文件状态
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
上面提示说明所有已跟踪文件无任何修改。
Git之前默认分支名是master
,后来改为main
。
关于github默认分支名改为main后可能的处理。
二.跟踪新文件
$ git add <文件名或目录路径>
使用git add添加文件到暂存区或者称为追踪文件后,运行git status
命令,如果提示Changes to be commited
,则紧跟下面的文件则是已跟踪、已暂存状态。
三.暂存已修改的文件
使用git status
命令出现Changes not staged for commit
提示是说明该提示下面的文件已跟踪且内容发生变化,但未提交到暂存区,这时使用git add
提交到暂存区即可。
四.状态简览
使用-s
或--short
选项可以简化状态输出:
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
注意状态有两列。
??
:新添加的未跟踪文件。空格
:未修改。A空格
:新添加到暂存区的文件。空格M
:工作区中已修改但未暂存的文件。M空格
:已修改且已暂存。MM
:已修改,暂存后又作了修改但未暂存。R
:文件已被重命名。D
:文件已被删除。五.忽略文件
一般我们不希望项目编译产物和日志文件等被列入未跟踪文件。我们可以创建一个.gitignore
文件,列出想要忽略的文件模式。
.gitignore
文件是一个用于指定不应该被Git版本控制的文件和目录的文件,一般我们将其放在Git仓库根目录下应用于全局,但也可以放在特定的子目录下,则只对该子目录有效。
以下是一些关于.gitignore
文件的规范和常见用法:
文件格式:.gitignore
是一个文本文件,每一行表示一个需要忽略的文件或目录。
注释:以#
开头的行会被视为注释,不会被Git处理。
通配符:通配符用来匹配文件名或路径。以下是一些常见的通配符:
*
:匹配零个或多个字符。?
:匹配一个字符。**
:递归匹配任意子目录。/
:目录分隔符。排除目录:忽略整个目录及其内容:
# 忽略名为build的目录及其内容
build/
排除特定文件:只需指定文件名或通配符:
config.ini
排除文件类型:
*.log
递归匹配子目录:
**/*.log
取反规则:假如你想忽略build/
目录下所有文件但保留build/important.log
:
build/
!build/important.log
六.查看已暂存和未暂存的修改
使用git status
或git diff
可以查看已暂存、未暂存的文件,只不过git diff
以文件补丁形式更具体展示哪些行发生了改变。
git diff
比较的是当前工作目录的未暂存更改和暂存区域最后一次提交(HEAD)之间的差异, 也就是未暂存的变更。
git diff --staged
或git diff --cached
则比较已暂存待提交和最后一次提交(HEAD)之间的差异,即已暂存的更改。
七.提交更新
$ git commit
执行上面命令会启动你选择的文本编辑器来输入提交说明。
追加-v
选项查看具体修改。
追加-m
选项可以附带提交信息在命令里。
提交信息是一条简要的文本信息,用于描述你所做的更改的性质、目的或上下文。
git commit
执行完后,会提示当前所在分支,本次提交的完整校验和(哈希值),本次提交中有多少文件修订过以及多少行添加或删除。
Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit
加上 -a
选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add
步骤。
八、移除文件
移除文件分为从磁盘移除和从暂存区移除。
从磁盘移除:从磁盘删除使用标准的文件删除操作,如在命令行使用rm
(Unix或Linux)或del
(Windows),文件将被永久删除,不再存在于你的工作目录中。但是该操作不会自动反映在Git的版本历史中,需要只需额外步骤git rm
来告诉Git。若删除的文件之前修改过或已放入暂存区,则必须使用-f
选项强制删除。
从暂存区移除:从暂存区移除文件后,文件仍保存在当前工作目录中:
git rm --cached <文件或路径>
。九、移动文件
移动文件使用git mv <源文件或路径> <目的文件或路径>
。
git mv
相当于下面三条命令:
$ mv README.md README
$ git rm README.md
$ git add README
git mv
也可以用于重命名文件。
不传入任何参数的默认情况下,git log
会按时间先后顺序列出所有的提交,最近的更新排在最上面。
# 常规形式
$ git log
# -p 或 -patch 选项,增加补丁形式
$ git log -p
# --stat 选项,展示简略统计信息
$ git log --stat
# --pretty = oneline,展示简略统计信息
$ git log --pretty = oneline
# 定制记录的显示格式
$ git log --pretty = format:"%h - %an,ar%:s%"
1.输出格式
git log --pretty = format
常用选项:
选项 | 说明 |
---|---|
%H |
提交的完整哈希值 |
%h |
提交的简写哈希值 |
%T |
树的完整哈希值 |
%t |
树的简写哈希值 |
%P |
父提交的完整哈希值 |
%p |
父提交的简写哈希值 |
%an |
作者名字 |
%ae |
作者的电子邮件地址 |
%ad |
作者修订日期(可以用 --date=选项 来定制格式) |
%ar |
作者修订日期,按多久以前的方式显示 |
%cn |
提交者的名字 |
%ce |
提交者的电子邮件地址 |
%cd |
提交日期 |
%cr |
提交日期(距今多长时间) |
%s |
提交说明 |
git log --pretty=format:%h %s" --graph
的执行结果如下:
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
*
表示一次提交,竖线 (|
) 代表一个分支,斜线 (/
) 和反斜线 (\
) 表示分支的合并。
2.限制输出长度
限制git log
输出的选项:
选项 | 说明 |
---|---|
- |
仅显示最近的 n 条提交。 |
--since , --after |
仅显示指定时间之后的提交。 |
--until , --before |
仅显示指定时间之前的提交。 |
--author |
仅显示作者匹配指定字符串的提交。 |
--committer |
仅显示提交者匹配指定字符串的提交。 |
--grep |
仅显示提交说明中包含指定字符串的提交。 |
-S |
仅显示添加或删除内容匹配指定字符串的提交。 |
1.覆盖提交
$ git commit --amend
执行该命令,如果自上次以来未做任何修改,那么快照保持不变,只修改提交信息。
而如果存在修改,这次提交会覆盖上次提交。
2.取消暂存的文件
$ git reset HEAD <文件>
3.撤销对文件的修改
$ git checkout -- <file>
查看远程仓库名称
git remote
: 显示当前仓库已配置的所有远程仓库的简写名称。。默认名字是origin
。
git remote -v
: 显示当前仓库已配置的所有远程仓库的简写名称和对应的URL。这会显示每个远程仓库的读取和写入的URL,如果你克隆了一个仓库,通常会看到一个名为"origin"的默认远程仓库。
添加远程仓库
git remote add
: 添加一个新的远程仓库,并指定它的简写名称和URL。通常在开始一个新项目时,你会使用 git clone
将远程代码库克隆到本地,然后使用 git remote add
来添加其他远程仓库(如团队协作中的共享仓库)。
从远程仓库中抓取与拉取
$ git fetch <remote-name>
git fetch
命令用于从远程仓库下载最新的提交历史,但不会自动合并或更新您的工作目录。它只会将远程仓库的变更下载到本地,并将它们存储在名为"origin"(默认远程仓库名)的分支中,例如origin/master
表示远程仓库的master分支。
$ git pull <remote-name> <branch-name>
git pull
命令用于从远程仓库获取更新并自动合并到当前分支中。它实际上是git fetch
和git merge
两个命令的组合。首先,它会执行git fetch
来获取远程仓库的更新,然后将这些更新自动合并到当前分支中。
推送到远程仓库
$ git push <remote-name> <branch>
git push
将本地代码或修改推送到远程仓库的分支。
注意:执行git push
前,确保拥有服务器的写入权限以及本地分支与远程分支之间没有冲突(即之前没有人推送过),否则你的推送将被拒绝,必须先抓取其他人的工作并合并到你的工作中才能推送。
查看某个远程仓库详情
命令格式:
$ git remote show <remote>
远程仓库的重命名与移除
# 重命名
$ git remote rename <oldname> <newname>
# 删除
$ git remote remove <remote-name> 或 git remote rm <remote-name>
在Git中,你可以给特定的提交(Commit)来使用标签(Tag)打上标记,类似于一个代码版本的快照。标签通常用于标识重要的里程碑、版本发布或稳定版本,以便以后更容易地找到和访问这些特殊地提交。
列出标签
命令:git tag
以字母顺序列出标签。
按照特定模式查找标签:git tag -l
。
创建标签
Git有两种标签:轻量标签(lightweight)和附注标签(annotated)。
轻量标签
轻量标签是对特定提交的引用。只包含提交信息。
创建轻量标签的命令:git tag
。不加提交号默认给当前分支的最新提交打标签。
使用git show
可以查看标签信息和对应的提交信息。
附注标签
附注标签是Git数据库中一个完整对象,是可以被校验的,包含了打标签者的信息和一个标签信息。
命令:git tag -a
。不加提交号默认给当前分支的最新提交打标签。
共享标签
git push
不会将标签推送到远程服务器上。这需要我们显式的推送标签:
git push origin --tags
。git push origin
。删除标签
git tag -d
。git push :refs/tags/
或git push origin --delete
。检出标签
git checkout
可以用于检出指定的提交,并将仓库的 HEAD 指向该提交。这样会处于“分离 HEAD”状态,意味着您不再位于任何分支上。通常,您不会在这种状态下进行修改,因为新提交将没有分支引用,会很难找到和维护。
如果想检出旧标签并且需要更改旧版本中的内容,那么就需要新建一个分支:git checkout -b
。
Git提供给命令提供别名的功能,这样我们可以对长命令使用自定义简写。
命令格式:git config --global alias.
。