前言
听到大佬说我太菜了.没办法啊,确实蛮菜的,需要学习很多东西吧,就很难受。
正文
安装
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
--global
是指这台机器上所有的Git仓库都会使用这个配置
创建版本库
先mkdir
建立一个空目录
然后,用git init
初始化当前目录Git可以管理的仓库
文件
上传文件
用命令git add ***
把文件添加到仓库
接着用git commit -m "***"
把文件提交到仓库
文件改动
git status
命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
git diff
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式
git log
命令显示从最近到最远的提交日志
Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,往上100个版本写成HEAD~100
。
把当前版本回退到上一个版本,就可以使用git reset --hard HEAD^
,经尝试,命令在Bash
下运行无错,在cmder
下会有出现More的提示,只需要再写一下HEAD后面的^
就可以了
如果真的返回上一个版本了,还想撤回本次操作,那么可以使用git reflog
命令,来记录你的每一次命令。接着用git reset --hard commit_id
命令回到操作前的状态
撤销修改
当发现文件改动后,准备提交前,发现文件有问题,可以用git checkout -- file
可以丢弃工作区的修改
命令git checkout -- git学习
意思就是,把git学习文件在工作区的修改全部撤销,这里有两种情况:
一种是 git学习 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
一种是 git学习 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
总之,就是让这个文件回到最近一次git commit或git add时的状态。
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
删除
当你在工作区删除文件后,你有两个选择
一是确实要从版本库中删除该文件,那就用命令git rm file
删掉,并且git commit
另一种情况是删错了,git checkout -- file
仓库
分布式优点
可以利用ssh 添加多个Key,假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了
推送到远程库
关联远程库
git remote add origin https://github.com/Draymonders/git-learning.git
第一次推送master分支的所有内容
git push -u origin master
以后就可以用
git push origin master
使用https
除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放
http
端口的公司内部就无法使用ssh
协议而只能用https
。
分支
创建分支
git checkout -b dev
表示创建并切换
相当于
git branch dev //创建dev分支
git checkout dev //使用dev分支
git branch
命令会列出所有分支,当前分支前面会标一个*号
然后修改文件 接着git add
and git commit
接着回到master分支下 git checkout master
把dev
分支合并到master
下,用git merge dev
合并完成就可以删除dev
分支了,用git branch -d dev
分支语句汇总
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
分支合并图:git log --graph
分支管理策略
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git merge --no-ff -m "merge with no-ff" beta
master是稳定版本,最好不要轻易动
然后下面建立一个beta测试版本,用来汇总代码和测试
最后建立每个人的分支,汇总到beta分支下。