参考廖雪峰的Git教程整理的,官网链接:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
git分区:工作区->(add)暂存区->(commit)版本库
-
安装
sudo apt-get install git -
创建版本库
空目录下:mkdir learngit
cd learngit
git init
ls -ah 查看是否有隐藏的.git目录 -
创建文件
vim readme.txt 写入一些内容
git add readme.txt 文件添加到仓库(可以一次add多个)
git commit -m “wrote a readme file” 把文件提交到仓库
注意:add是从工作区提交到暂存区,commit是从暂存区提交到版本库 -
修改后可以查看哪些文件被修改过
git status -
查看具体修改了什么
git diff readme.txt -
查看提交历史,以便确定要回退到哪个版本
git log
git log --pretty=oneline 减少输出内容,每行的头部为commid id -
回退到上一个版本
git reset --hard HEAD^ -
指定回到之前回退掉的某个版本
git reset --hard 1094a(这个号码为回退版本的commid id) -
查看命令历史,以便确定要回到未来的哪个版本
git reflog扫描二维码关注公众号,回复: 3576201 查看本文章 -
查看工作区和版本库里面最新版本的区别
git diff HEAD - - readme.txt -
丢弃工作区的修改
git checkout - - readme.txt -
把暂存区的修改撤销掉,重新放回工作区
git reset HEAD <file>
如果后悔修改了文件可以先撤销暂存区回到工作区再用11的指令丢弃修改 -
直接删除工作区文件
rm <file> -
从版本库中删除该文件
git rm <file>
git commit -m “remove file” -
误删工作区文件,从版本库恢复出来
git checkout - - <file> -
创建SSH Key
ssh-keygen -t rsa -C "[email protected]"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可
可以在目录下找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件
id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人 -
使用github作为远程git库
登陆GitHub,打开“Settings”,“SSH and GPG keys”页面:
点“New SSH key”,填上任意Title,在key文本里粘贴id_rsa.pub,然后点击“Add SSH Key”
这个key主要从来识别出你推送的提交确实是你推送的 -
github上创建新的仓库
在右上角找到“Create a new repo”按钮 -
本地库关联github仓库
git remote add origin [email protected]:michaelliao/learngit.git
michaelliao替换成你自己的GitHub账户名
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的
learngit.git为仓库名 -
推送内容到远程库
git push -u origin master
把当前分支master推送到远程,由于远程库是空的,我们第一次推送master分支时,加上了-u参数用于关联远程库,后面每次提交都直接使用下面的指令:
git push origin master -
克隆一个本地库
git clone [email protected]:yourgithub/repo.git
cd repo
ls -
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,
第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。
如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
创建dev分支
git checkout -b dev (-b参数表示创建并切换,相当于以下两条命令)
git branch dev
git checkout dev -
查看当前分支
git branch (当前分支前面会标一个*号) -
切换回master分支
git checkout master -
把dev分支的工作成果合并到master分支上
git merge dev -
删除分支
git branch -d dev -
查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit -
删除dev分支
git branch -d dev -
当需要到另一个分支去处理事情(bug),可以把当前工作区储藏起来,等以后恢复现场后继续工作
git stash -
查看之前储藏的工作现场列表
git stash list -
恢复之前的储藏工作现场
git stash pop
恢复指定的stash
git stash apply stash@{0} (最后这个参数可以通过stash list获得) -
合并分支并禁用Fast forward,加上"–no-ff"
git merge --no-ff -m “merge with no-ff” dev
-m 是描述信息,dev为合并进master上的分支 -
丢弃一个没有被合并过的分支
git branch -D <name> -
查看远程库的信息
git remote
git remote -v 显示更详细的信息 -
从本地推送分支
git push origin <branch-name> -
如果推送失败(试图推送的提交有跟别人冲突),所以需要先抓取分支看看
git pull 用git pull把最新的提交从origin/dev抓下来 -
指定本地分支(dev)和远程分支(origin/dev)的链接,否则pull可能失败
git branch --set-upstream-to=origin/dev dev本地推送分支,如果失败
失败则先用git pull抓取相应的分支
建立本地分支和远程分支的链接
再pull则成功
手动解决合并冲突,再commit然后push -
把分叉的提交历史“整理”成一条直线,看上去更直观。
git rebase -
新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag <tagname> -
指定标签信息
git tag -a <tagname> -m “blablabla…”
-a为标签名,-m为说明 -
查看所有标签
git tag -
推送一个本地标签到远程库
git push origin <tagname> -
推送全部未推送过的本地标签
git push origin --tags -
删除一个本地标签
git tag -d <tagname> -
删除一个远程库的标签
git push origin :refs/tags/<tagname> -
忽略某些文件时,需要编写.gitignore
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理 -
配置别名
git config --global alias.st status
告诉Git,以后st就表示status