首先感谢廖雪峰老师的细心讲解Git教程 - 廖雪峰的官方网站。
本文只是自己的学习后的总结,没什么逻辑可言。
执行完commit后,想撤回commit,怎么办?
git reset --soft HEAD^
这样就成功的撤销了你的commit
注意,仅仅是撤回commit操作,您写的代码仍然保留。
至于这几个参数:
--mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft
不删除工作空间改动代码,撤销commit,不撤销git add .
--hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:
git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了
说一下个人理解:
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
git add 文件名
##把文件从工作区添加到暂存区,注意git add . 表示把工作区全部内容添加到暂存区
git commit -m "备注信息"
##把暂存区的内容提交到仓库分支上
git status
##查看仓库状态
git diff 文件名
##对比文件与分支上最新版本文件
git diff 版本ID --文件名
##对比文件与分支上指定版本文件
git log
##查看日志
git log --pretty=oneline
##查看日志,把每条日志合并为一行
git reset --hard head^
##回退到前一个版本,注意^在windows里是特殊字符,需要加引号 git reset --hard head"^"
##这个--hard表示即回退本地文件,也回退commit信息,有兴趣的可以研究下reset的三种方式
git reset --hard head~数字
##回退到此前第X个版本
git reset --hard head 版本ID
##回退到指定版本, 版本id是每次commit时生成的,可在git log中查看
git reflog
##查看每个版本的操作日志
git checkout --文件名
##撤销工作区对某文件的修改
git reset 版本ID 文件名
##撤销暂存区对文件的修改
git clone 仓库地址 [别名]
##克隆仓库到本地,默认与仓库名称一致,可以指定本地的名称
git branch
##查看分支列表
git branch 分支名
##新建分支
git branch -d 分支名
##删除分支
git branch -D 分支名
##强制删除分支,主要应用场景:分支已经提交了,再merge到主分支前决定不要了,就强制删除。(很少用)
git checkout -b 分支名
##新建并切换到分支,也可以写:git switch -c 分支
git checkout 分支名
##切换到分支,也可以写:git switch 分支名
git merge 分支
##把分支合并到当前分支
git log --graph --pretty=oneline --abbrev-commit
##查看各分支提交日志
git stash
##保存现场,当前工作区没有开发完,又来一个优先级高的任务,此时工作区代码不能提交,又不舍得删除,就用git stash,把工作区内容先装到一个存储罐内,等新任务完成了,再从罐里掏出来。执行git stash后,工作区就被还原到上次commit之后的状态了。
git stash pop
##还原现场,新任务完成,从存储罐里掏出原来工作区修改的内容,并且此时把罐里的临时文件给删除了
git stash apply
git stash drop
##这俩也是还原现场,apply表示还原现场,drop表示删除罐里的临时文件
git stash list
##查看存储罐里的临时文件
git cherry-pick 版本ID
##如果发现历史中某次提交的内容与本次修改内容一样,可以直接把该次提交拿过来并自动合并到当前分支上,注意在此之前应先把工作区的修改提交了
git push origin 分支名
##把本地项目推送到远程的分支上
git pull
## 从远程分支拉取代码
git checkout -b 分支名 origin/分支名
##创建一个与远程相同的分支,通常两个分支名相同,如果pull时提示没有建立链接,执行下面命令
git branch --set-upstream 分支名 origin/分支名
git tag 标签名 [版本ID]
##打标签,默认是最新版本,也可以指定提交的ID号
git tag -a 标签名 -m "描述" 版本ID
##添加描述
git show 标签名
##查看标签信息
git tag
##查看所有标签
git push origin 标签名
##推送标签到远程
git push origin --tags
##推送所有的标签到远程
git tag -d 标签名
##删除本地标签
git push origin:refs/tags/标签名
##删除远程标签
git config --global alias.别名 原指令或"原指令组合"
##配置指令别名,这个很nb,可以自己百度下常用的别名
git config -l
##查看本地git的配置项
下面讲一下搭建本地git仓库和远程库
1.远程库
前提:你已经再github上注册了一个账户,登录成功,并且本地已经安装过git了(没有装的自己百度就行,满网都是)
a. 点击右上角个人头像,在出现的菜单中找“setting”,点击“setting”,在新页面的菜单中找“SSH***”开头的菜单(目前叫SSH and GPG keys,之前叫这个,不知道以后改不改),然后右面点“new SSH key”,出现俩字段的表单,title自己随意起,key很重要,先留着往下看。
b.在本地自己喜欢的 目录下“右键”--“git bash”,然后在打开的命令行中执行'ssh-key-gen -t rsa -C "自己的邮箱地址"'(这个邮箱跟github没关系,写自己的哪一个都行,当然写别人的也无所谓),回车,会让给密钥起个名字(建议id_rsa_自己github用户名),然后一路回车(不用设置密码),这就完成了,在当前目录下有俩文件生成,".pub"结尾的是公钥,另一个是私钥,选中公钥文件,用记事本打开,全选,复制,粘贴到a中提到key字段的表单中,点击ADD SSH KEY。至此,自己电脑就有权限操作github上的远程库了。那个放密钥的文件夹是可以移动的(不用不敢碰,我试了,你也可以删除了试试,来告诉我啥后果)。
c.接下来就是github上新建个资源库:还是右上角,点击头像旁边的“+”,出现的菜单中点击“new repository”,新出现的表单中,输入个名字,描述想输就输,其他默认,点确定,就ok了。远程库建完了。
2.本地仓库
前提:安装过git了哈
a.找个目录,新建个文件夹,文件夹名即为本地仓库名
b.两种方式:一是直接从远程库clone,上面有clone的命令,clone完成本地库就创建完了,也与远程库建立了联系,没啥好讲的了;主要是第二种:先建本地仓库,再与远程仓库建立联系,下面步骤都是基于第二种的哈。
c.打开cmd窗口,切换到仓库目录下,执行“git init”,本地库就创建完成了。
d.接着执行“git remote add origin https://github.com/github用户名/github仓库名.git”,此时本地库与远程库建立了联系。
e.接着执行(其实是第一次推送时执行,不是非要马上接着上面执行)“git push -u origin master”,这一步是把本地库的内容推送到远程库上,-u让两个库以后可以相互交流,pull/push 都不用再加-u了。
到此就完事了,本地库无论哪种方式创建完成时,文件夹内会出现".git"文件夹。
补充个问题,对文件名进行大小写切换时,git默认是检查不到的,在git bash中执行这句命令即可。
git config core.ignorecase false