基本操作:
1.git config --global user.name ' ' //配置名字
2.git config --global user.email ' ' //配置邮箱
3.git init //初始化一个Git仓库
4.git add ‘ ’ (git add -A) //把文件添加到暂存区,可反复多次使用,添加多个文件;
5.git commit -m ' ' //把暂存区的所有内容提交到当前分支
6.git status //查看仓库当前状态
7.git diff //看具体修改了哪些内容
8.git log --pretty=oneline //显示从最近到最远的提交日志,加上后面这句话,看的更清楚
关于回退:
9.git reset --hard HEAD^ //回退到上一个版本。在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写成HEAD~100
。例如先回退到上一个版本(HEAD^),然后会发现最新的那个版本已经不见了,如果想再次回到最新的那个版本,就通过git log找到commit id,再通过git reset --head commit_id回退 ,这个commit id写前几位就可以了,没必要写全。如果commit id找不到了,可以通过git reflog查看你之前的每一次命令。
PS:必须先git add 文件放到暂存区再git commit提交,否则无效
10.git checkout -- file //丢弃工作区的修改 。一种是文件
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;另一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
PS:就是你在电脑上看到的目录,比如目录下gitskills里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。
11.git reset HEAD <file> //撤销掉暂存区的修改,重新放回工作区,然后再通过git checkout -- file 撤销掉工作区的修改。
自我理解:工作区 --> 暂存区(git checkout) -->版本库(git reset,git checkout) -->远程版本库?
回退总结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
12. rm file //删除文件,如果是真的想要删除这个文件,在执行完rm以后,再用git rm(此时同git add操作),然后再提交,这样在工作区和版本库中就都没有了这个文件。如果是删错了,用git checkout -- test.txt回退就可以了,因为版本库里面还有这个文件。
远程仓库:
13.ssh-keygen -t rsa -C "youremail@example.com" //常见SSH key。设置成功以后可以在用户主目录(C盘-->用户/user-->Administrator)下找到.ssh目录,里面有id_rsa
和id_rsa.pub
两个文件
PS:在设置ssh的时候最后一步记得用ssh -T git@github.com验证,否则把本地仓库推送到远程仓库的时候会提示remote origin already exists.参考http://phpstudy.php.cn/c.php/35363.html
14.git remote add origin https://github.com/username/reposityname.git //把本地仓库与远程仓库相关联
15.git push -u origin master //把本地仓库内容推送到远程仓库
PS:从这时候开始只要本地仓库提交了,就可以直接通过git push origin master推送内容了
从远程库克隆:
16.git clone git@github.com:用户名/仓库名.git (git clone github上的https地址) //都可以,Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快。
分支管理:
17.git checkout -b 分支名 //创建加切换分支
18.git branch //查看当前分支 git branch -r(远程分支) git branch -a (本地分支和远程分支)
19.git checkout 分支名 //切换分支
20.git merge 分支名 //用于合并指定分支到当前分支(只能看到当前分支信息) git merge --no-ff -m ' 提交信息' 分支名 (可以从分支历史上看到分支信息)
PS:合并分支时,加上-no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
21.git branch -d 分支名 //删除分支
22.cat 文件名 //查看文件内容
23.git log --graph --pretty=oneline --abbrev-commit //查看分支历史
24. git branch 分支名 //创建一个新的本地分支,需要注意,此处只是创建分支,不进行分支切换,在当前分支的基础上,创建新分支,所以新建的分支的基本情况和当前分支一模一样
25.git reflog 查看所有的操作记录
PS:当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。用git log --graph
命令可以看到分支合并图。