git 是当下最流行最前卫的版本管理系统,这里列出最简单的用法,但是也囊括了最常用的语句。帮助你再最快的时间内能够操作git但是想要知道里面的原理,还是需要阅读相关书籍
常用命令汇总
git add file.txt提交到缓冲区
git commit -m "message" 提交版本
git status 查看状态
git diff查看修改
git log查看日志,也就是历史版本
git log --pretty=oneline每个历史版本只显示一行
git reset --hard HEAD^回退到上一版本,HEAD^^会推到上2个版本,HEAD~100回退到上100版本
git reset --hard 888888(版本号)返回到版本号888888的未来版本
git reflog在回退版本之后若不能查看未来版本号,用这句话查看过去日志
git checkout -- file.txt撤销修改,返回到最后依次commit或者add状态
git rm file.txt删除文件,删除后需要commit
git remote add origin https://github.com/yourname/your_repo.git新建一个远程仓库
git push -u origin master推送到远程仓库
git clone https://github.com/....克隆一个远程仓库到本地
------------------------------------------------------------------------------------------------------------------------------------------
工作区和缓存区以及撤销修改
工作区:电脑能看到的目录
版本库:工作区中的.git文件就是版本库
暂存区:通过git add把文件放入的区域叫暂存区。最后通过git commit 统一提交
git checkout -- file.txt撤销修改,返回到最后依次commit或者add状态
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
git rm file.txt删除文件,删除后需要commit
----------------------------------------------------------------------------
远程仓库管理
首先注册github账户,然后在本机上生成RSA密码:
ssh-keygen -t rsa -C "your\_email@example.com"
然后在github设置里面的ssh添加公钥。直接复制~/.ssh/id_....pub到文件就可以了
然后新建一个远程仓库,全部使用默认项目。在本地要上传的仓库中:
git remote add origin https://github.com/yourname/yourrepo.git
git push -u origin master
然后你就成功了,已经同步了。每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
从远程到克隆到本地仓库
在远程新建一个仓库,我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件。然后在本地使用
git clone https://github.com/name/gitskills.git
---------------------------------------------------------------------------------------------------------------------------------------
分支管理
git checkout -b dev 创建分支。等同于以下两句话
git branch dev
git checkout dev这个时候就可以在dev分支上正常提交了
git branch查看当前分支,带*的是当前分支
git checkout master 切换回主分支
git merge dev把dev合并到主分支
git branch -d dev把分支删除
解决冲突
当两个分支的提交发生冲突的时候,比如两个分支中相同的文件有不同的内容,就需要手动解决冲突然后再次提交(git status会给出详细提示)
同时,使用如下语句也能看到分支合并的情况:
git log --graph --pretty=oneline --abbrev-commit
合并时使用如下语句能再以后看出该分支是合并过的,默认是看不到的:
git merge --no-ff -m "merge with no-ff" dev
当正在编辑一个分支,并且已经add但没提交,这个时候如果要切换到另一个分支中,需要保留现场,然后再切换出去:
git stash
git checkout master
当完成另一个分支之后,再切换回到这个分支:git checkout dev
这个时候,使用如下语句查看保留现场的内容:
git stash list
利用如下语句,提取保护的现场,并删除保护过程:
git stash pop
另一种方法用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除。
注:推送分支的时候,默认使用的是git push -u origin master推送到主分支上,但是也可以使用git push -u origin dev推送到其他分支上
再github上感兴趣的项目一定要先fork到自己的git上,再clone下来,这样才有修改的权限
---------------------------------------------------------------------------------------
标签管理
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
直接使用如下语句就可以给当前分支打上1.0标签
git tag v1.0
git tag 查看标签
git tag v1.0 id_of_the_repo 如果再历史记录中忘了打标签,可以先从log中查看历史,然后对相应的id打标签
git show v1.0查看标签的详情
如果标签打错了,也是可以删除的:
git tag -d v0.1
完成后,可以将标签推送到远程:
git push origin v1.0
git push origin --tags一次性将所有更改的标签推送到远程
删除一个远程标签,首先要先删除本地的,然后再使用如下语句删除远程:
git push origin :refs/tags/tagname