git教程参考(廖雪峰的教程):https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
1、基础命令
1)初始本地库
命令:git init
2)添加修复到缓冲区
命令:git add
命令:git add . 【注意有个句点】是添加所有文件的修改到缓冲区
不管是新增的文件还是修改的文件,都要add到缓冲区再commit提交
3)删除版本库里面的一个文件
命令:git rm 文件名
比如项目里有个文件要删除,先在工作区删除,然后执行上面的命令,就会在把删除操作添加到缓冲区,commit后会生效
4)查看状态:比如当前分支、文件修改情况
命令:git status
5)把缓冲区的修改提交到版本库
命令:git commit -m ‘提交的说明’
6)修改撤回
命令:
git reset --hard HEAD^ 回退到上一个版本
git reset --hard HEAD^^ 回退到上2个版本
git reset --hard HEAD~100 回退到上100个版本
git reset --hard 版本号(commit id) 回退到指定版本
注意:git log 命令可以查看提交的版本号
7)回退工作区文件的修改
命令:git checkout -- 文件名
注意:如果文件的修改提交到了缓冲区,而且之后还有修改,那么此命令会让工作区内容和缓冲区一致
8)从缓冲区撤回修改到工作区
命令:git reset HEAD
9)查看提交日志
命令: git log
git log --pretty=oneline 按时间线查看
10)查看历史操作命令
命令: git reflog
11)克隆仓库
命令: git clone 仓库地址
仓库地址可以是 git@..... 或者https://......执行这2种协议,git协议的传输会快些
12)分支相关
git branch 查看本地分支
git branch -a 查看远程库分支
git branch 分支名 创建新分支
git branch -d dev 删除分支。如果分支没有合并到其他分支,那么会有报错提示。
git branch -D dev 强制删除分支
13)切换分支
git check 分支名
git check -b 分支名 创建并切换到新分支
14)关联远程库分支
git remote add origin 远程库地址
注意:
git remote add 远程库名 远程库地址
本地代码可以关联多个远程库,远程库名和地址要区别开来,不能都用origin
15)推送代码到远程库
git push -u origin 分支名
git push origin 分支名
16)合并分支
git merge 分支名
这里比如当前是在master,然后执行 git merge dev,是把dev分支合并到master分支
git merge -m ‘合并分支说明’ 合并分支并提交说明
17)暂存修改
git stash 把工作区的修改暂存
git stash list 查看存储的内容列表
git stash apply stash内容恢复到工作区,stash列表里面不删除该内容,需要用 git stash drop 来删除
git stash pop stash内容恢复到工作区,stash列表里面会删除该内容
18)查看远程库信息
git remote 查看远程库信息
git remote -v会展示更详细信息
19)拉取代码
命令: git pull
如果失败,可能是本地分支和远程分支没有做关联
git branch --set-upstream-to=origin/dev dev
git branch --set-upstream-to <branch-name> origin/<branch-name>
20)标签相关
git tag 查看所有的标签,结果按照字母排序,而不是按照时间排序
git tag 标签名 打标签,根据当前分支的最新commit id
git tag 标签名 指定commit id
git tag -a 标签名 -m 标签说明
git show 标签名 查看标签的信息
git tag -d 标签名 删除一个本地标签
git push origin 标签名 把标签推送到远程库
git push origin --tags 推送本地尚未推送到远程的所有标签
如果标签已经推送到远程,则要分两步删除,先删除本地,再删除远程
第一步 git tag -d 标签名
第二步 git push origin :refs/tags/标签名
21)回退版本
命令: git revert 版本号
2、实操
1)github上创建仓库,注意要创建一个新文件,名字没关系,比如readme.txt或者index.html等都行
2)电脑上打开git bash,然后git clone,选择git协议的
前提是必须把自己电脑上的.ssh目录下的公钥在github上配置下。
备注:使用git协议的,如果ssh生成公钥密钥时没有设置密码,那么以后git push 就不需要输入密码。
使用https方式的,每次都要输入密码。所以推荐git协议的。
3)修改文件,git clone后本地有一个index.html,修改文件内容,然后提交
git add index.html
git commit -m "111"
4)推送到远程库
5)本地新建分支dev,并切换到dev分支
本地分支是dev,远程分支还没有dev
6)修改文件并提交dev分支
当前在dev分支,修改index.html的内容然后提交
git add index.html
git commit -m "222"
7)推送到远程的dev分支
先测试下直接git push会不会报错:
报错了,表示本地dev分支没有关联一个远程分支。此时远程也没有dev分支。
下面执行正确的命令:git push origin dev
推送成功。
在github上查看:
而dev分支:
8)合并dev分支代码到master分支
首先,先切换到master分支:
开始合并分支:
推送到远程库:
然后在github上查看:
3、其他
1)reset 和 revert都能回退,有什么区别呢?
先看下reset命令。新建reset.txt文件,提交了3次:
文件内容:
现在回退到第一次提交:
现在看下文件的内容:
文件内容已经改为第一次提交的情况
看下远程库的:
本地的先提交下:
提示说没有可以提交的。因为reset是回退版本,工作区的文件内容会退到了第一版。缓冲区没有修改的,所以会有这种提示。
远程库的也没有改变,
直接push也失败了。原因是远程库的代码版本领先本地的版本,因为本地的版本是回退了。所以直接push会提示不能用老版本覆盖掉新版本。
强制推送,成功了。因为是强制推送,表示可以覆盖,所以远程库也就跟本地一样,回退了。
下面看下revert的操作过程:
新增revert.txt,提交了三个版本:
revert.txt文件内容:
现在回退到上一版:
这里是因为我在编辑器打开了这个文件,所以有警告。但是实际上文件内容已经修改了:
可以看到回退的内容是到了缓冲区,需要提交
这样推送后,本地和远程的就一致了。
现在开始对比下reset和revert的区别
第一、reset回退版本,首先是回退本地的,如果此时就要提交到远程,要强制提交;
第二、revert回退版本,也是首先回退本地的,本地文件会被修改,而且是直接提交到了缓冲区,需要commit,然后可以推送到远程库;
第三、reset回退的,中间有版本提交信息丢失,revert的能看到每一次提交的,回退本身也是一个提交操作。
第四、从第三点可以看出,如果是reset提交,那么如果回退后并且提交到远程库,还想恢复,应该恢复不了。而revert的,因为每一次提交都保留了记录,所以很安全。
综上,还是建议用revert命令。reset用来恢复文件比较好。