注: 文章摘自: IT大飞说 - 掘金

用户配置
| 1 | git config --global user.name "Your Name" // Git 姓名 | 
初始化仓库
| 1 | git init | 
添加文件
提交至本地 “暂存区” (.git/index)
| 1 | // 单个文件添加至仓库 | 
提交暂存区的文件至本地仓库
将已添加的文件提交至本地 Git 仓库 (默认 master 分支)
| 1 | // 会弹出一个 Vim 编辑器输入内容后再提交 | 
查看仓库状态
| 1 | git status | 
比较当前文件的修改
| 1 | git diff <file> | 
查看历史提交记录
| 1 | git log | 
回退版本
在 Git 中, 用 HEAD 表示当前版本. 上一个版本就是 HEAD^, 上上一个版本就是 HEAD^^, 以此类推…
如果需要回退几十个版本的话可以这样写:HEAD~50
| 1 | git reset --hard HEAD^ | 
如果你回退完版本又后悔了, 一般情况下是回不来的.
但如果你可以找到之前 commit id 的话,也是可以的
commit id (版本号) 就是一个使用 SHA1 计算出来的一个非常大的十六进制数字, 提交时看到的一大串类似 3628164...882e1e0 的就是了
| 1 | git reset --hard + commit id | 
如果忘记 commit id 的话可以执行下一步命令找回
查看历史命令记录
会将你之前所有的操作类型及相关信息打印出来
| 1 | git reflog | 
查看文件提交前后的区别
查看工作区和版本库里面最新版本文件的区别,也可以不加 HEAD
| 1 | git diff | 
丢弃工作区的修改
适用于工作区修改没有 add 的文件
| 1 | git checkout -- <file> | 
丢弃暂存区的文件
适用于暂存区已经 add 的文件
他会将暂存区的修改放回到工作区中
| 1 | git reset HEAD <file> | 
删除文件
| 1 | rm <file> | 
然后提交即可
如果不小心删错了, 且还没有提交的话使用下面命令即可恢复删除
注意它只能恢复最近版本提交的修改, 你工作区的修改是不能被恢复的
| 1 | git checkout -- <file> | 
创建SSH key
一般本地 Git 仓库和远程 Git 仓库之间的传输是通过 SSH 加密的, 所以我们可以将其生成的公钥添加到 Git 服务端的设置中即可, 这样 Git 就可以知道是你提交的了
| 1 | ssh-keygen -t rsa -C "youremail@example.com" | 
与远程仓库协作
与远程库关联
| 1 | git remote add origin git@github.com:shenxianhui/vue-test.git | 
删除本地库与远程库的关联
| 1 | git remote rm origin | 
作用:有时候我们需要关联其他远程库,需要先删除旧的关联,再添加新的关联,因为如果你已经关联过了就不能在关联了,不过想关联多个远程库也是可以的,前提是你的本地库没有关联任何远程库,操作如下:
- 先关联Github远程库:
| 1 | git remote add github git@github.com:shenxianhui/vue-test.git | 
- 再关联码云远程库:
| 1 | git remote add gitee git@gitee.com:shenxianhui/vue-test.git | 
现在,我们用 git remote -v 查看远程库的关联信息,如果看到两组关联信息就说明关联成功了
如果要推送到GitHub,使用命令:
| 1 | git push github master | 
如果要推送到码云,使用命令:
| 1 | git push gitee master | 
将远程库中的更改合并到当前分支中
| 1 | git pull <远程主机名> <远程分支名>:<本地分支名> | 
比如,要取回 origin 主机的 next 分支,与本地的 master 分支合并
| 1 | git pull origin next:master | 
如果远程分支 next 要与当前分支合并,则冒号后面的部分可以省略
| 1 | git pull origin next | 
实质上,这等同于先做 git fetch,再执行 git merge
| 1 | git fetch origin | 
从远程库获取分支 / 标签
更新远程所有分支到本地
| 1 | git fetch origin | 
推送到远程仓库
注意:第一次提交需要加一个参数 -u, 以后不需要
| 1 | git push -u origin master | 
克隆一个远程库
| 1 | git clone git@github.com:shenxianhui/vue-test.git | 
分支管理
- 创建一个分支 branch1
| 1 | git branch branch1 | 
- 切换到 branch1分支
| 1 | git checkout branch1 | 
- 创建并切换到 branch1分支
| 1 | git checkout -b branch1 | 
- 查看分支
提示:显示的结果中,其中有一个分支前有个*号,表示的是当前所在的分支
| 1 | git branch | 
- 将 branch1合并到当前分支
| 1 | git merge branch1 | 
- 删除分支 branch1
| 1 | git branch -d branch1 | 
查看提交历史记录
| 1 | git log | 
命令可以看到分支合并图
| 1 | git log --graph | 
合并分支
禁用 Fast forward 模式合并分支
默认 Git 合并分支时使用的是 Fast forward 模式, 删除分支后会丢掉分支信息, 所以我们需要强制禁用此模式来合并
| 1 | git merge --no-ff -m "merge" branch1 | 
补充内容:实际开发中分支管理的策略
- master分支应该是非常稳定的, 也就是仅用来发布新版本, 平时不能在上面提交
- 我们可以新开一个 dev分支, 也就是说dev分支是不稳定的. 到版本发布时, 再把dev分支合并到master上,在master分支发布新版本
- 你和你的协作者平时都在 dev分支上提交, 每个人都有自己的分支, 时不时地往dev分支上合并就可以了
保存工作现场
作用:当你需要去修改其他内容时,这时候你的工作还没有做完,先临时保存起来,等干完其他事之后,再回来回复现场,再继续干活;为什么?因为暂存区是公用的,如果不通过 stash 命令隐藏,会带到其它分支去
| 1 | git stash | 
查看已经保存的工作现场列表
| 1 | git stash list | 
恢复工作现场 (恢复并从 stash list 删除)
| 1 | // 方式1 | 
恢复工作现场,但 stash 内容并不删除,如果你需要删除执行如下命令
| 1 | git stash drop | 
恢复指定的 stash
说明:其中 stash@{0} 为 git stash list 中的一种编号
| 1 | git stash apply stash@{0} | 
删除一个没有被合并过的分支
实际开发中,添加一个新 feature, 最好新建一个分支, 如果要丢弃这个没有被合并过的分支, 可以通过下面的命令强行删除
| 1 | git branch -D <name> | 
查看远程库的信息
| 1 | git remote | 
显示更详细的信息
| 1 | git remote -v | 
推送分支
| 1 | git push origin master // 推送 master 分支到远程库 | 
创建本地分支
如果远程库中有分支, clone 之后默认只有 master 分支的, 所以需要执行如上命令来创建本地分支才能与远程的分支关联起来
| 1 | git checkout -b branch1 origin/branch1 | 
本地与远程分支关联
如果你本地新建的 branch1 分支,远程库中也有一个 branch1 分支 (别人创建的), 而刚好你也没有提交过到这个分支, 即没有关联过. 这时会报一个 “no tracking information” 信息,通过下面命令关联即可
| 1 | git branch --set-upstream branch1 origin/branch1 | 
创建标签
| 1 | git tag <name> // 例: git tag v1.0 | 
查看所有标签
| 1 | git tag | 
对历史提交打 tag
先使用 $ git log --pretty=oneline --abbrev-commit 命令找到历史提交的 commit id
例如对 commit id 为 “123456” 的提交打一个 tag
| 1 | git tag v0.9 123456 | 
查看标签信息
| 1 | git show <tagname> | 
创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字,”123456” 为 commit id
| 1 | git tag -a v1.0 -m "V1.0 released" 123456 | 
用私钥签名一个标签
签名采用 PGP 签名,因此,必须先要安装 gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错,具体请参考GnuPG帮助文档配置Key;
作用:用 PGP 签名的标签是不可伪造的,因为可以验证 PGP 签名
| 1 | git tag -s v2.0 -m "signed V2.0 released" 345678 | 
删除标签
| 1 | git tag -d <tagname> | 
删除远程库中的标签
比如要删除远程库中的 V1.0 标签,分两步
- 先删除本地标签
| 1 | git tag -d V1.0 | 
- 再推送删除
| 1 | git push origin :refs/tags/V1.0 | 
推送标签到远程库
| 1 | git push origin <tagname> | 
推送所有标签到远程库
| 1 | git push origin --tags | 
自定义Git设置
Git 显示颜色,会让命令输出看起来更清晰、醒目
| 1 | git config --global color.ui true | 
设置命令别名
| 1 | git config --global alias.st status | 
说明:--global 表示全局,即设置完之后全局生效,st 表示别名,status 表示原始名
好了,现在敲 git st 就相当于是 git status 命令了,是不是方便?
当然还有其他命令可以简写,这里举几个:很多人都用 co 表示 checkout,ci 表示 commit,br 表示 branch…根据自己的喜好可以设置即可,个人觉得不是很推荐使用别名的方式
推荐一个比较丧心病狂的别名设置
效果自己去体会…
| 1 | git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" | 
其他说明:
配置的时候加上 --global 是针对当前用户起作用的,如果不加只对当前的仓库起作用
每个仓库的 Git 配置文件都放在 .git/config 文件中,我们可以打开对其中的配置作修改,可以删除设置的别名
而当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件 .gitconfig 中,我们也可以对其进行配置和修改
忽略文件规则
在 Git 工作区的根目录下创建一个特殊的 .gitignore 文件,然后把要忽略的文件名或者相关规则填进去,Git就会自动忽略这些文件
如果你想添加一个被 .gitignore 忽略的文件到 Git 中,但发现是添加不了的,所以我们可以强制添加
| 1 | $ git add -f <file> | 
或者我们可以检查及修改 .gitignore 文件的忽略规则
Git 会告诉我们具体的 .gitignore 文件中的第几行规则忽略了该文件,这样我们就知道应该修改哪个规则了
| 1 | git check-ignore -v <file> | 
如何忽略已经提交到远程库中的文件?
如果你已经将一些文件提交到远程库中了,然后你想忽略掉此文件,然后在 .gitignore 文件中添加忽略,然而你会发现并没有生效,因为 Git 添加忽略时只有对没有跟踪的文件才生效,也就是说你没有 add 过和提交过的文件才生效
比如说:我们要忽略 .idea 目录,先删除已经提交到本地库的文件目录
| 1 | git rm --cached .idea | 
如果提示:fatal: not removing '.idea' recursively without -r
加个参数 -r 即可强制删除
| 1 | git rm -r --cached .idea | 
然后,执行 git status 会提示你已经删除 .idea 目录了,然后执行 commit 再 push 就可以了,此时的 .idea 目录是没有被跟踪的,将 .idea 目录添加到 .gitignore 文件中就可以忽略了
作者:小贤笔记
链接:https://www.jianshu.com/p/dd7f18ed0bb1
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。