Git 常用命令总结

Git 安装与配置

查看 git 版本

git --version

配置 git:config

配置 git 使用 git config 命令。默认情况下必须配置 user.nameuser.email 用以标识谁提交的代码。

默认情况下 git config 会为当前 git 仓库进行配置,配置文件存放在 git仓库/.git/config 文件中。
如下代码会为当前仓库配置 user.name

git config user.name 你的名字

配置 git 的全局属性需要加上 --global,配置文件存放在 用户主目录/.gitconfig 文件中。
如下命令会为当前用户的所有仓库配置 user.email

 git config --global user.email 你的邮箱

取消配置

使用 --unset 可以取消已经添加的配置。
如下的命令将取消上面设置的 user.name

git config --unset user.name

如果要删除全局的属性,同样要添加 --global 选项。

显示配置信息

可以通过 config--list 来显示当前的配置信息。以下命令将显示当前 git 仓库的配置信息,由于全局配置也在当前仓库中生效,所以也会显示全局配置信息。

git config --list

查看全局配置信息:

git config --global --list

配置别名

可以使用 alias 给 git 命令设置一个别名,后续可以使用别名来取代原本的指令。例如,为 status 命令配置一个 st 的别名:

git config --global alias.st status

后续就可以使用如下别名来替代 git status 命令:

git st

使用别名可以设置简化一个复杂的 git 命令,例如下面设置的别名可以简化 log 命令:

git config --global alias.mylog "log --color --graph --pretty=format:'%Cred%h%Creset-%C(yellow)%d%Creset%s%Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"

后续可以使用 git mylog 来替代 git log 命令,以显示更多的提交内容和颜色支持。

创建 git 仓库

使用 init 命令

以下命令将在当前目录中创建一个 git 本地仓库:

git init

使用 clone 命令

git clone 命令用于 clone 一个远程仓库到本地:

git clone https://github.com/Lee-swifter/slide-switch.git

git clone 后面跟着远程仓库的地址。

无论使用哪种方式创建 git 仓库,都会在该仓库目录下生成一个 .git 的隐藏文件夹,该文件夹中包含所有的版本记录和配置信息,默认不要对这个文件夹进行手动修改。

git 的三个区域

Git本地有三个工作区域:工作区、暂存区(Stage/Index)、本地仓库。如果在加上远程的 git 仓库就可以分为四个工作区域:

  • 工作区:就是开发者平时工作、修改代码的区域;
  • 暂存区:用于临时存放对文件的改动,暂存区用于直接跟工作区的文件进行交互,工作区文件的提交或者回滚首选都是通过暂存区。事实上它只是一个文件,保存即将提交的文件列表信息,一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);
  • 本地仓库:就是安全存放数据的位置,这里面有你提交的所有版本的数据。其中 HEAD 指向最新放入仓库的版本;
  • 远程仓库:与本地仓库相连接的另一台机器上的 git 仓库,用于代码交换。
    git的几个区的相关命令

本地仓库常用命令

显示当前仓库状态(git status)

git status

此命令将显示工作区、暂存区、以及对应的远程仓库的同步状态:

  • Changes to be committed: 显示提交到暂存区,但没有提交到版本库的文件;
  • Changes not staged for commit: 显示工作区中修改的文件,还没有提交到暂存区的文件;

将修改从工作区提交到暂存区(git add / git rm)

git add [file]

将指定文件的修改从工作区提交到暂存区,也可以使用下面的命令一次性提交所有文件的修改:

git add .

如果文件在工作区被删除,那么将这个删除提交到暂存区,还可以使用 git rm 命令:

git rm [file]

将修改从暂存区提交到版本库(git commit)

git commit [file_name] -m "commit message"

以上命令将指定文件的修改提交到版本库,不指定 file_name 时将提交所有暂存区的修改。

使用 commit 命令必须为提交添加一个提交信息,使用 -m 参数指定后面的字符串为此提交的信息。也可以不使用 -m 参数,此时 commit 命令会跳转到 vim 编辑中让你输入提交信息。

如果发现提交信息写错了,可以使用以下命令对刚刚 commit 的提交信息进行修改:

git commit --amend -m "new commit message"

同样也可以不使用 -m 参数,跳转到文本编辑器中修改提交信息。此命令实际上是修改 HEAD 指针指向的 commit 的信息。

查看提交记录(git log)

对于所有提交到版本库中的 commit,可以使用如下命令查看提交记录:

git log

每一个 commit 都对应了一个 commit id,此 id 是一个 40 位的 16进制的 SHA-1 散列编码,用来唯一标记一个 commit。

  • 可以添加 --pretty=oneline 参数来单行显示一个提交;
  • 可以添加 --graph 参数为 commit 记录添加图形化显示,在显示分支情况时特别有用;
  • 可以添加 --abbrev-commit 参数来缩减要显示的提交记录;
git log --pretty=oneline
git log --graph --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit

关于 git log 的更多参数,可以使用以下命令来获取:

git log --help

此命令会打开一个网页,所有 git 的命令后面都可以使用 --help 参数来显示其使用文档。

也可以使用如下命令来按照提交的用户显示提交记录:

git shortlog

查看 git 操作历史(git reflog)

git reflog

显示当前仓库的操作记录,以及相关的 commit id。可以通过这个命令查到某些已经被丢弃的 commit 的 id。

丢弃工作区的修改(git restore / git checkout – file)

可以使用下面的命令来丢弃在工作区的修改:

git restore [file]

此命令必须指定一个文件,将丢弃此文件的修改,文件将恢复到修改前的状态。

还有一个与 restore 具有相同作用的命令,如下:

git checkout -- [file]

此命令将丢弃该文件在工作区的修改,并让这个文件回到最近一次 git commitgit add 时的状态。

文件对比 (git diff)

在 git 中一般使用 git diff 命令来对比文件:

git diff [file]

这个命令比较文件在暂存区和工作区的差异,如果不指定 file,那么将显示所有文件在两个区域的差异。例如下面的命令将显示 readme.txt 这个文件,已写入暂存区和已经被修改但尚未写入暂存区的内容的区别:

git diff readme.txt

可以使用 --cached--staged 选项,来显示暂存区和版本库中的差异:

git diff --cached [file]
git diff --staged [file]

可以使用 HEAD 来比较工作区与版本库中的差异:

git diff HEAD [file]

如果不想看所有的差异内容,则可以添加 --stat 来简化 git diff 的输出:

git diff --stat HEAD [file]

比较两个 commit 之间的差异:

git diff [commit_id_1]...[commit_id_2] [file]

以上命令将比较 commit_id_1commit_id_2 这两个提交之间的差异,此处的 commit_id 可以换成分支名或是 HEAD。

工作区的 (git stash)

可以将工作区未提交的内容先暂存起来:

git stash

暂存的工作区内容可以通过下面的命令查看:

git stash list

恢复工作区内容有两种方式:

  • 使用 git stash apply 恢复,但是恢复后,stash 内容并不删除,你需要用 git stash drop 来删除;
  • 另一种方式是用 git stash pop,恢复的同时把 stash 内容也删了;

远程仓库

创建 SSH key

一般的远程仓库如 GitHub、GitLab 等,与本地仓库之间的传输都是通过 SSH 加密的,因此在使用这些远程仓库之前需要先在设置 SSH。

以下命令将生成 SSH Key:

ssh-keygen -t rsa -C "youremail@example.com"

生成完成之后会在用户主目录下生成 .ssh 文件夹,在这两个文件夹中会有 id_rsaid_rsa.pub 两个文件,这两个就是 SSH Key 的秘钥对,id_rsa 是私钥,不能泄露出去,id_rsa.pub 是公钥。

在生成 SSH 之后,需要将公钥的内容设置到远程仓库对应的位置。

添加远程仓库

git remote add origin https://github.com/Lee-swifter/demo-application.git

上面的命令将添加名为 origin 的远程仓库,origin 后面跟的是这个远程仓库的地址。

一般情况下,都会默认远程仓库名为 origin,但也可以指定其他名称。一个本地仓库也可以添加多个远程仓库,例如下面的命令为本地仓库添加了两个远程仓库:

git remote add github https://github.com/Lee-swifter/demo-application.git
git remote add gitee https://gitee.com/Lee-swifter/demo-application.git

显示当前远程库信息

git remote -v

删除已经绑定的远程仓库

git remote rm origin

以上命令将删除名称为 origin 的远程库。

推送分支到远程仓库

git push origin master

以上命令将推送 master 分支到远程仓库

拉取远程分支到本地

git checkout -b dev origin/dev

以上命令将从远程仓库拉取 dev 分支到本地。

关联本地分支和远程分支

git branch --set-upstream-to=origin/dev dev

以上命令将本地的 dev 分支与远程的 dev 分支进行关联。

分支相关命令

Git 中的分支其实更像是一个指针,默认情况下,会有两个指针,一个是 master 默认分支,一个是 HEAD,指向当前的分支。

显示当前分支

git branch

此命令显示当前仓库中的分支,其中前面有 * 号的是当前所在分支。可以使用 -r 或 -a 选项显示远程分支或所有分支:

git branch -r

创建分支

git branch <name>

此命令只是创建了一个分支,但并不会将当前分支切换到新分支上去。

切换分支

git switch <branch_name>

此命令将当前分支切换到指定的分支。也可以使用 checkout 来切换分支:

git checkout <branch_name>

创建并切换到新分支上

可以将上面的命令进行合并,使用一个命令创建分支并切换到新分支上:

git switch -c <branch_name>
git checkout -b <branch_name>

这两个命令的作用是相同的。

合并其他分支到当前分支

Git 中合并分支是个大学问,合并分支有三种方法,分别是 mergerebasecherry-pick,这里先讲 merge

git merge <branch_name>

以上的命令会将指定的分支上的内容合并到当前的分支。使用 merge 合并分支又有三种模式:

  • fast-forward
  • no-ff
  • squash

这三者之前的区别可以查看这篇文章:图解4种git合并分支方法

删除分支

git branch -d <branch_name>

此命令将会删除指定分支。如果分支上有没有合并的提交,Git 会提示使用 -D 选项。

分支管理策略

这里使用 廖雪峰官方网站中的分支管理策略 中的一张图来总结:
分支管理策略

标签相关命令

标签总是和某个 commit 挂钩,可以理解为指向某个 commit 的指针。

显示所有标签

git tag

创建标签

git tag <tag_name>

在当前的提交上创建标签,标签名为后面的 name 指定。如果要在特定的 commit 上打标签,则可以使用如下命令:

git tag <tag_name> [commit_id]

上面的命令将在指定的 commit_id 上创建名为 tag_name 的标签。

还可以创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字:

git tag -a <tag_name> -m <message> [commit_id]

查看标签信息

git show <tag_name>

删除标签

git tag -d <tag_name>

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

推送标签到远程仓库

以下命令将推送指定标签到远程仓库:

git push origin <tag_name>

也可以一次性推送所有标签到远程仓库:

git push origin --tags

删除远程标签

首先要在本地删除指定标签:

git tag -d <tag_name>

然后推送删除到远程:

git push origin :refs/tags/<tag_name>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李斯维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值