你应该知道的这50个Git命令

436 阅读5分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

前言

在工作中,我们的代码管理都是 git 做的,git 的使用也可以说是我们开发人员必备的技能了。下面分享我觉得这50个常用的 git 命令给大家。

如何查看你的 Git 配置

下面命令返回你的 git 配置信息,比如你的用户名和电子邮箱:

$ git config -l

如何设置你的 Git 用户名

通过下面命令配置你的用户名。

$ git config --global user.name "Jason"

缓存登录凭据

可以将登录凭据储存在缓存中,不必每次都输入它。

$ git config --global credential.helper cache

克隆远程分支仓库

git克隆远程仓库项目时如果不指定分支,只会克隆默认分支的内容。

$ git clone -b 分支名称 远程地址

初始化 Git repo

项目根目录初始化一个新的 Git 储存库。

$ git init

添加单个文件到暂存区

将单个文件添加到暂存区域 文件夹名/文件名,可以使用 git status 查看修改的文件位置。

$ git add <path/to/file>

查看暂存区的文件

$ git ls-files

将发生变化的所有文件添加到暂存区

使用 .通配符,可以将所有发生改变的文件一键添加到暂存区域。

$ git add .

将某个文件夹下所有修改的文件添加到暂存区

下面命令中使用 *号,可以将 ‘fil’ 文件夹所有修改文件更加到暂存区域。

$ git add fil*

# or

$ git add fil/*

查看 Git 储存库状态

此命令用于查看在你上次提交之后是否有对文件进行再次修改,或者显示已添加到暂存区域的文件。

$ git status

将暂存区内容添加到本地仓库中

前面我们使用 git add 命令将内容写入暂存区, git commit 就是提交暂存区到本地仓库中,'message' 可以是一些备注信息。

$ git commit -m 'message'

# 比如
$ git commit -m '这是我的第一次提交'

跳过暂存区并提交更改

-a 参数设置修改文件后不需要执行 git add,直接来提交。

$ git commit -a -m

查看 Git 日志

此命令显示当前存储库的提交历史记录:

$ git log

查看历史提交记录,包括 Git 的更改

此命令可以查看历史提交记录,并且每次能够看到每次提交记录对应修改提交的文件

$ git log -p

查看历史操作记录

下面命令可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

$ git reflog

查看指定提交

查看指定commit hashID的所有修改

$ git show commit-id

# 例如
$ git show 2998f8a6e19011d9f62xx1ce1f126e8d326ffac9

Git 中查看日志统计信息

此命令显示提交的历史记录,包括提交修改的文件以及文件添加或删除了多少行

$ git log --stat

'diff' 查看更改之前所做的更改

git diff 默认显示所有修改之后还没有暂存起来的变化内容。

--staged 比较暂存区文件 与上一次commit 的差别

$ git diff
$ git diff App.js
$ git diff --staged

从Git的当前工作树中删除跟踪文件:

通过git rm命令将版本库中的文件删除,命令为:

$ git rm filename

注:删除文件后,需要 git commit 一下,版本库中文件才被完全删除。

在 Git 中忽略文件

项目的更目录创建一个.gitignore文件并提交它。

恢复某个已修改的文件

恢复工作目录修改过文件未缓存(即未执行git add)未提交(即未执行git commit)的文件

$ git checkout filename

# 撤销所有更改
$ git checkout .

版本回退

回退到上一版本

$ git reset --hard HEAD^   # 上上个版本则 HEAD^^ 以此类推...

回退到某一个版本则需要知道 commit-id

$ git reset --hard commit-id

另外撤销所有暂存文件可以:

$ git reset .

git reset 三种模式

回退一个版本,会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态, 暂存区就是git add临时提交到的地方。 未暂存的状态就是将这些文件标记位待提交

$ git reset(--mixed) HEAD~1

回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响) 这些文件还在暂存区中

$ git reset --soft HEAD~1

回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换

$ git reset --hard HEAD~1

git reset 回退到某一个版本之后,下次 git 提交的时候,之前该版本后面的版本会被删掉。

撤销提交

# 生成一个撤销最近的一次提交的新提交
$ git revert HEAD   # 上上个版本则 HEAD^^ 以此类推...

# 生成一个撤销指定提交版本的新提交
$ git revert commit-id

创建新分支

默认情况下,您有一个分支,即主分支。使用这个命令,您可以创建一个新的分支。Git不会自动切换到它,您需要使用下一个命令手动进行切换。

$ git branch branch_name

切换分支

$ git checkout branch_name

查看所有分支

可以使用 git branch查看所有已创建的分支状态,并用星号标记当前分支,并用绿色高亮显示。

$ git branch

创建并切换到新创建的分支

$ git checkout -b branch_name

删除分支

当你完成了一个分支的工作并合并了它,你可以使用下面的命令删除它:

$ git branch -d branch_name

合并分支

合并指定分支到当前分支,可以使用下面命令

$ git merge branch_name

使用 git rebase

git mergegit rebase 都可以整合两个分支的内容,最终结果没有任何区别,但是变基使得提交历史更加整洁。

$ git rebase branch_name_here

具体可以看这里 rebase

图表的形式显示提交日志

--graph获取提交日志以图的形式显示,--oneline将把提交消息限制在一行。

$ git log --graph --oneline

终止冲突合并

放弃合并并重新开始,你可以运行以下命令:

$ git merge --abort

添加远程仓库

$ git add remote https://repo_here

查看远程仓库地址

$ git remote -v

查看远程仓库更多信息

$ git remote show origin

推送到远程仓库

$ git push

推送到指定远程仓库

$ git push origin

推送到指定分支

$ git push origin 本地分支:远程分支

# 例如
$ git psuh origin test:master

拉取远程分支更改

每次 git push 之前我们需要 git pull 一下,保证远程分支和本地代码最新,也能够避免冲突

$ git pull

查看正在跟踪的远程分支

$ git branch -r

获取远程仓库的

这个命令将从远程 repo下载更改,但不会在本地分支上执行合并(git pull 会执行合并)

$ git fetch

对比 git pull

与git pull相比git fetch相当于是从远程获取最新版本到本地,但不会自动merge。如果需要有选择的合并git fetch是更好的选择。效果相同时git pull将更为快捷。

指定查看远程分支提交日志

$ git log origin/master

合并远程仓库和本地仓库

$ git merge origin/master

推送新分支到远程仓库

加了参数-u后,以后即可直接用 git push 代替 git push origin master

$ git push -u origin branch_name

删除远程分支

当你不需要远程的某个分支时:

$ git push --delete origin branch_name_here

强制推送

这个命令的作用是将自己本地仓库的代码直接推送至仓库,完全以你的提交为准,之前其他人的提交都会被覆盖。

$ git push -f

添加贮藏更改

该命令是日常代码提交常用的,本地分支不干净(有文件修改),比如切换分支,都会提示本地分支有改变无法切换等等。

$ git stash save '储存名称'

查看贮藏列表

可以使用下面命令查看添加贮藏是否成功保存

$ git stash list

应用贮藏

贮藏完成后我们就可以切换到其他分支了,在其他分支工作完成后,我们再回到之前的分支。然后可以使用以下命令来把之前的储藏的代码进行恢复。

# 最新的贮藏删掉,并把贮藏的代码恢复出来
$ git stash pop

# 所有贮藏代码恢复出来
$ git stash apply

# 恢复指定的进度到工作区。stash_id是通过`git stash list`命令得到的
$ git stash pop stash@{1}

删除贮藏

# 删除指定的储藏
$ git stash drop [stash name]

# 清除所有的储藏
$ git stash clear

打版本号(tag)

项目上线需要打版本号,给运维那边帮上,这个流程少不了的。tag前需要将代码先拉去再推送到远程仓库。

$ git tag '版本号:v1.0.1'

# 指定tag到远程
$ git push origin '分支' --tag

# 查看当前tags
$ git tag --list

删除远程仓库中的文件

不小心把某些文件上传到了远程仓库,如果想要删除:

# 删除暂存区和工作区的文件
$ git rm filename  

# 只删除暂存区的文件,不会删除工作区的文件
$ git rm --cached filename 

最后

上面介绍完一些基础常用的命令,遇到问题,还需要根据问题还解决。偶尔会使用图形化工具更方便看,自己使用Sourcetree工具,挺好用。