git的基本使用

git
其实一直在断断续续地用git,但一直是用什么查什么,懂的几个命令也只是皮毛。趁着假期有时间,便花了半天时间系统地看了下相关教程、文章,收获很大,做个总结,也方便自己脑子短路时查阅。

初始化

git init #初始化一个git仓库,即把当前目录变成Git可以管理的仓库,会生成一个.git隐藏文件夹

信息显示

git status #查看状态
git log #查看提交日志
git log --graph --pretty=oneline --abbrev=commit #以图,一行,缩写的形式显示日志

提交修改

git add test.txt # 将工作区文件添加到暂存区,就像购物时添加到购物车
git add . #添加所有有修改的文件到暂存区
git commit -m "test" #将暂存区文件提交到版本库,就像购物时将购物车物品一起结账

版本回退

git reset --hard HEAD^^ #回退到当前版本上一个的再上一个版本
git reset --hard commit_id #通过commit_id回退版本
git reflog #回退到旧版本后又想到新版本,可用此查看commit_id
git reset HEAD test.txt #把添加到暂存区的修改撤销
git checkout -- test.txt #用版本库中的test文件覆盖工作区的test文件
git rm test.txt #删除本地test文件

远程仓库

前提:添加了SSH Key,并初始化当前目录

#先有本地库,后有远程库,使用关联命令
git remote add origin git@github.com:ryderchan/learngit.git #关联远程仓库,取名origin
git push -u origin master #推送本地master分支到远程,第一次带-u,指定默认主机,以后可用git push的简写
git push origin master #推送本地master分支到远程
#先有远程库,使用克隆命令
git clone git@github.com:ryderchan/learngit.git #支持git和https,git速度更快
git push #把远程仓库最新的提交抓取下来
git branch --set-upstream local-branch origin/branch #建立本地分支与远程分支的关联

分支

常见分支:master(主分支,稳定),dev(开发分支),bug(本地bug修复),feature(新功能分支)

git branch #显示所有分支
git branch dev #创建分支
git checkout dev #切换分支
git checkout -b dev #创建并切换到dev分支
git branch -d dev #删除分支
git merge dev #使用fast-forward模式合并dev到当前分支,若有冲突出现,需要修改添加提交。若无冲突,分支历史信息不可见
git merge --no-ff -m "no-ff" dev #使用no-ff方式合并,分支历史信息可见
git stash #保存现场
git stash list #查看保存记录
git stash apply #恢复最近一次保存记录
git stash drop #删除最近一次保存记录
git stash pop #恢复最近一次保存记录,并删除其存储记录

标签

标签用于记录一些关键信息,如版本。其实与commit时附带的信息有些功能上的相似与重复。

git tag #显示所有标签
git tag v1.0 commit_id #给当前分支的commit_id添加标签,不指定id则打在最新提交上
git tag -a v1.0 -m "version 1.0" commit_id #创建带说明的标签
git show v1.0 #显示标签信息
git tag -d v1.0 #删除本地标签
git push origin v1.0 #推送标签到远程仓库
git push origin :refs/tags/v1.0 #删除远程仓库标签(需要先用-d删除本地标签)

忽略特殊文件

比如java编译生成的文件,比如用于存储账号密码的文件,这类文件往往不需要甚至不能上传。git的.gitignore文件就能达到这个效果,在创建仓库时勾选相关选项,本地修改后,连同其他文件一同推送即可。下面的便是python的.gitignore文件的一部分(自定义忽略xlsx文件)

# data file
*.xlsx
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/xxxxxxxxxx .gitignore文件
------ 本文结束 ------