关于对Git的学习总结
安装git
- 设置用户名和邮箱
$ git config --global user.name"your name"
$ git config --global user.email "email@example.com"
创建版本库
- 创建空目录
$ mkgit learngit //创建一个叫做learngit名字的空目录
$ cd learngit //进入目录
$ pwd //显示当前目录所在的路径
- 用
git init
命令将创建的目录变成git可管理的仓库
添加文件到版本库
- 用
git add
命令告诉git,把文件添加到了仓库(实际上就是把文件修改添加到暂存区)
$ git add readme.txt //添加了一个叫做readme的txt文件
- 用
git commit
命令告诉git,把文件提交到了版本库(实际上就是把暂存区的所有内容提交到当前分支)
$ git commit -m"wrote a readme file" // -m后面输入对本次提交的说明
-
git commit
成功以后会告诉你,1 file change
:一个文件被改动;2 insertions
:插入了两行内容(readme.txt有两行内容) -
git status
命令可以时刻掌握仓库当前的状态 -
git diff <file name>
可以查看具体修改了什么内容
每次对文件修改以后都要用git add
提交到仓库,用 git commit
提交改动说明
版本回退
git log
命令可以查看文件修改提交的历史纪录,显示的是从最近到最远的提交日志,加上--pretty=oneline
参数可以缩减显示内容,输出内容是版本号以及git commit
中的内容,HEAD
表示当前版本,上一版本为HEAD^
上上版本为HEAD^^
上100版本为HEAD~100
git reset --hard HEAD^
为回退到HEAD的上一版本,用git reset
命令来回退版本,回退后文件的修改会回到之前版本git reflog
命令可以记录你的每一次命令查看命令历史,如果不小心回退错了可以先用git reflog
查看版本号,然后用git reset --hard + 空格 + 版本号
来回退git add
提交的东西会放到暂存区,再由git commit
提交到仓库中。
撤销修改
- 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file
。 - 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD <file>
,就回到了第一条,第二步按第一条操作。 - 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
远程仓库
- 设置本地git仓库和github仓库
- 创建
SSH Key
: 在用户主目录下查看有没有.ssh
目录,打开看看有没有id_rsa
(私钥,不可泄露)和id_rsa.pub
(公钥) 文件,没有则创建SSH Key
$ ssh-keygen -t rsa -C"youremail@example.com"
- 在GitHub的
Account setting
,SSH Key
页面点击Add SSH Key
填上任意Title 在Key的文本框中粘贴id_rsa.pub
中的内容
- 添加远程库
- 登陆GitHub,
Create a new repo
创建新仓库 - 在本地要同步的仓库下运行命令
$ git remote add origin git@github.com:yourgithubname/cangkuname.git
- 首次将本地库的内容推送到远程库
$ git push -u origin master// 把当前分支master推送到远程
非首次推送
$ git push origin master
- 从远程库克隆
- 登陆GitHub创建新仓库,勾选
Initialize this repository with a README
(自动创建了README.md文件) - 用命令克隆一个本地库
$ git clone git@github.com:yourgithubname/cangkuname.git
创建与合并分支
- 创建并切换dev分支
$ git checkout -b dev// -b表示创建并切换分支
- 创建分支与切换分支分开进行
$ git branch dev
$ git checkout dev
- 用
git branch
命令查看当前分支,当前分支前面会标一个*
dev
分支的工作完成以后切换回master
分支
$ git checkout master
dev
分支的工作成果合并到master
分支上
$ git merge dev//用于合并指定分支(dev)到当前分支
- 合并完成后可删除
dev
$ git branch -d dev
- 使用
git log --graph
也可以看到分支合并情况 - 合并分支时,加上
--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。
-如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>
强行删除。
储存工作区内容
git stash
命令储存工作区内容git stash pop
恢复分支的同时把stash的内容也删除了git stash list
命令可以查看有几个stash的分支
创建标签
-
命令
git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id
-
命令
git tag -a <tagname> -m "blablabla..."
可以指定标签信息; -
命令
git tag
可以查看所有标签。
操作标签
-
命令
git push origin <tagname>
可以推送一个本地标签; -
命令
git push origin --tags
可以推送全部未推送过的本地标签; -
命令
git tag -d <tagname>
可以删除一个本地标签; -
命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。