基本操作
设置全局用户信息
git config --global user.name "username"
git config --global user.email "[email protected]"
创建本地版本库
通过git init
命令把当前目录变成 Git 可以管理的仓库, 即初始化(Initialized) Git 仓库.
添加文件到 Git 仓库
- 使用命令
git add <filename>
把文件添加到仓库暂存区(Stage), 可以多次使用添加多个文件, 实际输入不包含符号<>
, 下同; 使用git add -A
添加所有文件. - 使用命令
git commit -m "<massage>"
把文件提交到仓库分支.
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."
版本回退
- 要随时掌握工作区的状态, 使用
git status
命令. - 如果
git status
告诉你有文件被修改过, 用git diff
可以查看修改内容. - 使用
git log
可以查看提交历史记录, 以便确定要回退到哪个版本. HEAD
指向的版本就是当前版本, 因此, Git 允许我们在版本的历史之间穿梭, 使用命令git reset --hard commit_id
. (注意:HEAD
表示当前版本, 上一个版本就是HEAD^
, 上上一个版本就是HEAD^^
, 当然往上 100 个版本写 100 个^
比较容易数不过来, 所以写成HEAD~100
)- 要重返未来, 用
git reflog
查看命令历史, 以便确定要回到未来的哪个版本.
撤销修改
- 场景 1
当你改乱了工作区某个文件的内容, 想直接丢弃工作区的修改时, 用命令git checkout -- file
. (小提示:git checkout
其实是用版本库里的版本替换工作区的版本, 无论工作区是修改还是删除, 都可以“一键还原”) - 场景 2
当你不但改乱了工作区某个文件的内容, 还添加到了暂存区时, 想丢弃修改, 分两步, 第一步用命令git reset HEAD <file>
, 就回到了场景 1, 第二步按场景 1 操作. - 场景 3
已经提交了不合适的修改到版本库时, 想要撤销本次提交, 参考版本回退一节, 不过前提是没有推送到远程库.
删除文件
命令git rm
用于删除一个文件. 如果一个文件已经被提交到版本库, 那么你永远不用担心误删, 但是要小心, 你只能恢复文件到最新版本, 你会丢失最近一次提交后你修改的内容.
远程仓库
创建 SSH Key
在本地 Shell 键入命令
ssh-keygen -t rsa -C "[email protected]"
如果一切顺利的话, 可以在用户主目录里找到.ssh 目录, 里面有id_rsa
和id_rsa.pub
. 两个文件, 这两个就是 SSH Key 的秘钥对, id_rsa
是私钥, 不能泄露出去, id_rsa.pub
是公钥, 可以放心地告诉任何人.
添加 SSH Key
登陆 GitHub, 打开SSH keys页面, 点“Add SSH Key”, 填上任意 Title, 在 Key 文本框里粘贴id_rsa.pub
文件的内容
添加远程库
!> 小提示: 适用于先有本地库, 后有远程库的场景
使用命令git remote add origin [email protected]:<username>/<reponame>.git
把一个已有的本地仓库与远程库(origin)关联
关联后, 使用命令git push -u origin master
第一次推送master
分支的所有内容;
此后, 每次本地提交后, 只要有必要, 就可以使用命令git push origin master
推送最新修改.
- 关联两个远程库
# github
git remote add github [email protected]:<username>/<reponame>.git #关联 github
git push github master #推送到 github
# gitee
git remote add gitee [email protected]:<username>/<reponame>.git #关联码云
git push gitee master #推送到码云
- 解除关联
使用git remote rm origin
命令.
从远程库克隆
!> 小提示: 适用于先有远程库, 后有本地库的场景. 假设我们从零开发, 那么最好的方式是先创建远程库, 然后再从远程库克隆.
# ssh 方式
git clone [email protected]:<username>/<reponame>.git
# https 方式
git clone https://github.com/<username>/<reponame>.git
Git 支持多种协议, 包括 https, 但每次推送都必须输入口令; 而通过 ssh 支持的原生 git 协议速度最快且推送方便.
分支管理
创建与合并分支
- 创建+切换分支
# 创建+切换分支
git checkout -b <name> #相当于以下两条命令
# 创建分支
git branch <name>
# 切换分支
git checkout <name>
- 查看分支
git branch #列出所有分支, 当前分支前面会标一个 * 号标志
* dev
master
- 合并分支
# 切换回 master 分支
git checkout master
# 合并指定 dev 分支到当前分支
git merge dev
合并分支时, 加上--no-ff
参数就可以用普通模式合并, 合并后的历史有分支, 能看出来曾经做过合并, 而fast forward
合并就看不出来曾经做过合并.
git merge --no-ff -m "<massage>" dev
- 删除分支
# 删除本地分支
git branch -d <name>
# 强行删除
git branch -D <name>
Bug 分支
修复 bug 时, 我们会通过创建新的 bug 分支进行修复, 然后合并, 最后删除;
当手头工作没有完成时, 先把工作现场git stash
一下, 然后去修复 bug, 修复后, 再git stash pop
, 回到工作现场.
多人协作
# 查看远程库的信息
git remote -v
# 推送分支
git push origin master
# 克隆分支
git clone [email protected]:<username>/<reponame>.git
# 在本地创建和远程分支对应的分支
git checkout -b <branch-name> origin/<branch-name>
# 从远程抓取分支
git pull
# 建立本地分支和远程分支的关联
git branch --set-upstream <branch-name> origin/<branch-name>
Rebase
- 用法
git rebase
rebase 操作可以把本地未 push 的分叉提交历史整理成直线;
rebase 的目的是使得我们在查看历史提交的变化时更容易, 因为分叉的提交需要三方对比.
标签管理
创建标签
在 Git 中打标签非常简单, 首先, 切换到需要打标签的分支上, 然后, 敲命令git tag <tagname>
就可以打一个新标签:
git tag v1.0
之后可以用命令git tag
查看所有标签, 用git show <tagname>
查看标签信息, 还可以创建带有说明的标签, 用-a
指定标签名, -m
指定说明文字:
git tag -a <tagname> -m "<massage>"
要想给历史 common 打标签, 则先输入git log --pretty=oneline --abbrev-commit
找到历史提交的 commit id, 然后打上就可以了:
git tag <tagname> <commit_id>
操作标签
# 删除本地标签
git tag -d <tagname>
# 推送一个标签到远程
git push origin <tagname>
# 推送全部尚未推送到远程的本地标签
git push origin --tags
# 删除远程标签
git tag -d <tagname> #先删除本地标签
git push origin :refs/tags/<tagname> #再删除远程标签
其他操作
- 显示高亮
使用git config --global color.ui true
命令
- 忽略特殊文件
忽略某些文件时, 需要编写.gitignore
检验.gitignore
的标准是git status
命令是不是说working directory clean
.
使用git add -f <filename>
无视.gitignore
强制添加到 Git
使用git check-ignore -v <filename>
检查是否有规则限制了该文件的提交
- 配置别名
git config --global alias.st status #使用 st 表示 status
git config --global alias.co checkout #使用 co 表示 checkout
git config --global alias.ci commit #使用 ci 表示 commit
git config --global alias.br branch #使用 br 表示 branch
git config --global alias.unstage 'reset HEAD' #简化撤销命令
git config --global alias.last 'log -1' #配置一个 git last, 让其显示最后一次提交信息
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" #美化显示
每个仓库的 Git 配置文件都放在.git/config
文件中
而当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件.gitconfig
中
以上根据廖雪峰老师的Git 教程整理而成, 在此感谢!
补充说明
删除远程分支
git push <远程名> :<分支名> #注意冒号前有一个空格
# 示例
git push origin :dev #删除远程 dev 分支
克隆远程分支到当前目录
git clone <仓库链接> tmp && mv tmp/.git . && rm -rf tmp
克隆指定分支
默认 clone 的是 master 分支, 使用以下命令 clone 指定分支:
git clone -b <分支名> <仓库链接>
One comment
前来学习学习