本文经过学习廖雪峰老师的git教程整理而成,文章几处引用教程中的图,侵删,老师的git教程连接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000git
在A目录使用git进行版本管理,A目录即为工做区,咱们在工做区上面操做文件(建立、修改、删除等等),A目录下的隐藏目录.git是版本库,.git目录下主要有暂存区(stage)和当前分支(默认的git会自动建立master分支,不指定时当前分支指向master)两部分,以下图github
cd <DIR> git init
git init <DIR>
git add <FILE> //将文件修改添加到暂存区中; git commit -m 'MESSAGE' //将stage中的全部修改提交到当前分支上;
git status
git diff <FILE>
git log
git reset <commit_id>
(回滚至A版本后,再次git log时无法查到A版本以后的版本的commit id,此时若是想回到A版本以后的版本B时,可以使用git reflog查看B版本的commitid)app
git checkout -- <FILE>
结果说明:
当FILE修改后未add到暂存区时,此时撤销结果会将回到跟版本库中的状态。
当FILE已经add到暂存区后,又对FILE进行修改,此时撤销结果会回到跟暂存区同样的状态。
总结:先查看暂存区中是否有FILE,有则将暂存区中的FILE状态同步到工做区,不然将当前版本的FILE状态同步到工做区ide
git reset HEAD <FILE>
结果说明:
暂存区中没有FILE的修改,工做区FILE仍是保持修改状态的。学习
rm <FILE> //删除工做区中的FILE git rm <FILE> //删除版本库中的FILE git commit -m 'MESSAGE' //提交修改
(误删时,只需git checkout -- <FILE>便可恢复文件)this
将本地git仓库推送同步到远程仓库指针
git remote add origin git@github.com:lzs666/gittest.git
(origin:远程库的名称,git@github.com:lzs666/gittest.git:在github上建立的新仓库的地址)日志
git push -u origin master
(会将本地库的master分支内容推送到远程库的master分支上,-u参数会将本地的master分支与远程库的master分支关联起来,以后再push就不须要添加这个参数了)
推送本地分支内容同步到远程code
git push origin <name> //将本地指定<name>分支同步到远程库的<name>分支
抓取分支
使用git clone时,本地默认只能看到master分支,若想在dev上开发,必须手动抓取origin的dev分支到本地。blog
git checkout -b dev origin/dev
以后开发完push到origin的dev分支上:
git push origin dev
若此时push时,若发现已经有其余人push过了且与你推送的内容有冲突,会致使推送失败,解决以下:
git branch --set-upstream-to=origin/dev dev
git pull
git branch dev
git checkout dev
git checkout -b dev
git branch //会列出全部分支,当前分支面前会有一个*号
git merge dev
说明:
git merge dev执行时,只是将当前head指针移动到dev所在的位置,以下图
此时若是将dev分支删除,以后git log没法查看分支历史,因此合并时可以使用--no-ff参数修改合并模式,在merge时不是简单移动指针,而是生成一个commit至内容与dev一致。这种方式merge后即可经过git log查看分支合并历史。
git merge --no-ff -m 'COMMIT_MESSAGE' dev
此时的merge过程以下图,其中结点1和结点2的内容是同样的。
git branch -d dev
删除一个没有被合并过的分支
git branch -D <name>
标签做用:对应一个commitid,方便版本跳转。
标签特性:一个标签对应一个commit版本,同一分支上不能出现两个相同的标签名。
git tag <tagname> //为当前版本库中最新版本打上标签,即当前HEAD指向的版本 git tag <tagname> <commitid> //为指定版本打上标签 git tag -a <tagname> -m "message" //打上标签时添加说明信息
git show <tagname>
git tag
git tag -d <tagname>
git push origin <tagname>
git push origin --tags
一、git tag -d <tagname> 删除本地的标签 二、git push origin :refs/tags/<tagname> 删除远程标签
当因为某种状况没法提交,此时又得新建一个分支处理其余事情时,可以使用stash功能将工做区的改变先储存起来,等其余事情处理完后再恢复现场。
假设当前master分支的test.txt内容以下:
cat test.txt
this is for git test in master
当前咱们在dev分支,且将test.txt内容修改以下:
cat text.txt
this is for git test in dev
但咱们还不能提交改变。此时要求咱们新建一个新的分支去处理其余事情。
处理方法以下:
git stash
执行后,工做区状态会变成当前分支最新版本的状态,即test.txt内容为"this is for git test in master",以前所作的改变被储藏起来了。
git checkout -b forotherthing
git checkout dev
git stash pop
说明:
修改A文件--->git stash--->再次修改A文件--->git stash
此时git stash list会查到多个stash,可经过git stash apply stash@{N}恢复指定的stash,从而恢复到指定的状态。
git stash drop 删除stash内容
欢迎扫码关注公众号“KeepCode”,分享更多技术好文,并提供技术电子书籍免费下载,天天进步一点点~~~~