本文没啥难度,权当做篇学习笔记。
git基础知识
git diff example.txt
git add example.txt
git commit -m 'addby XXXX'
git status
git log[--pretty=online]
windows上安装git客户端,到官网下载即可。
安装完成后,在开始--> GitBash ,输入下面的内容:
git config --global user.name'lirl'
git config --global user.email'lirulei90@126.com'
mkdir testgit
cd testgit/
git init
Initialized empty Gitrepository in D:/testgit/.git/
编辑一个readme.txt,放到D:/testgit/目录下
![1.png wKioL1ePpPiAIcm5AAANFuo1Rjk596.png](https://i-blog.csdnimg.cn/blog_migrate/c9fb086c4d3180d69ed19bfe48577f78.png)
git add readme.txt
git commit -m 'add one file'
如下图:
![2.png wKiom1ePpPigROW1AAAODR4SOVg706.png](https://i-blog.csdnimg.cn/blog_migrate/033286947cda5338e59345324a6477b5.png)
然后,随便修改下这个readme.txt,
![3.png wKiom1ePpPiwqdiBAAAUbOzH1aM125.png](https://i-blog.csdnimg.cn/blog_migrate/a471997a8b531ee03422f8bbf8d7db75.png)
然后再次执行git status
![4.png wKioL1ePpPmTEFOjAAAsducXdY0893.png](https://i-blog.csdnimg.cn/blog_migrate/14cabb033c36826acdef6905d2a0fab8.png)
上图最后一行的提示告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
执行git diff readme.txt
![5.png wKiom1ePpT2TBcrrAAAb-lLQPsg786.png](https://i-blog.csdnimg.cn/blog_migrate/034a477187e2885da85217a3c9adcf32.png)
上图的绿色的就是现在的文件内容。
知道哪里修改后,我们心里有数后,就可以提交了。
git add readme.txt
git commit -m 'third'
git status
![6.png wKioL1ePpT2z2XJqAAAYWXeK7OM396.png](https://i-blog.csdnimg.cn/blog_migrate/98d7c46573719d154d84551b77d9f430.png)
![7.png wKiom1ePpT3T_uygAAAyJvLBDVE698.png](https://i-blog.csdnimg.cn/blog_migrate/f3e93f4feeb3f99a89bf25ec9909ae1d.png)
上图的git告诉我们,当前没有需要提交的修改,而且工作目录是干净的。
然后我们执行git log 看下修改的历史记录。
![8.png wKioL1ePpT7R15fGAAAt59xNoHs832.png](https://i-blog.csdnimg.cn/blog_migrate/32eae526dceebcda8d521a0de86ff007.png)
git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是third,上一次是add distributed,最早的一次是wrote a readme file。
如果觉得输出界面太杂乱,可以加上--pretty=oneline参数,如下图:
![9.png wKioL1ePpWHBUK-NAAAf2P4ezHw008.png](https://i-blog.csdnimg.cn/blog_migrate/42b3df68e1a7a7a28715ce511c15a3d1.png)
前半截的十六进制字符串是commit id,后面的是commit时候写的注释。
然后,我们再演示一下回滚操作,
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
如下表示回到上一版本:
git reset --hard HEAD^
![1.png wKiom1ePpZDCprnXAAAQPG7KuE4121.png](https://i-blog.csdnimg.cn/blog_migrate/c2a7f4c4bca70d6150281d75c57dc253.png)
回滚完成后,可以直接执行cat命令查看readme.txt的文件内容,如下图,文件内容已经回到上一版本了:
![2.png wKiom1ePpZGCFoeDAAAHm3A9U98815.png](https://i-blog.csdnimg.cn/blog_migrate/c91b8f298e3fe218f1d14d32991c44d5.png)
git log 再次看下有哪些版本
![3.png wKioL1ePpZGwIOfVAAAnNxH70eA635.png](https://i-blog.csdnimg.cn/blog_migrate/7a6dc5183e5b304edab47de4438b06c5.png)
最新的那个版本'third' 已经看不到了!想再回去已经回不去了,肿么办?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个commit id是dcb953c4e8...,于是就可以指定回到未来的某个版本。
如下执行:
git reset --hard dcb953c4e8c # 版本号没必要写全,前几位就可以了,Git会自动去找
git log 再次查看如下图,发现刚才的哪个版本已经回来了:
![4.png wKiom1ePpbvi-Vp8AAApe16E1WA983.png](https://i-blog.csdnimg.cn/blog_migrate/24eeb2815c0350995663a88d397a4cf9.png)
cat readme.txt 可以发现文件内容已经恢复了。
![5.png wKioL1ePpbuRKw3CAAAPrk62rAs334.png](https://i-blog.csdnimg.cn/blog_migrate/6d70c6820985c5a824abedd9a388b3f3.png)
git reflog # 可以查看所有分支的所有操作记录。包括(包括commit和reset的操作),包括已经被删除的commit记录。【常用于重返未来】
![6.png wKiom1ePpdvQUR_fAAAn08Ne86w846.png](https://i-blog.csdnimg.cn/blog_migrate/9135d0a4601ad179118f62ca61f41d28.png)
可以找到以前commit的记录,就可以回去了。
git reset --hard 760aa48 会退到这个版本
cat readme.txt
![7.png wKioL1ePpdvCWMGsAAAgcCCVjfM851.png](https://i-blog.csdnimg.cn/blog_migrate/7518d1dd1aaa98a60b8402767f489ff4.png)
linux上安装git客户端(本地模式)
yum install git -y
其他操作和winrdows上的一样。
首先添加个git用户名和邮箱,多用户的话,建议下面方式
gitconfig --localuser.name 'lirl'
gitconfig --localuser.email 'lirulei90@126.com'
假如,原有一个文件提交过的readme.txt。后来做了些修改,并新添加一个issue的文件。
然后执行git status,如下图:
![8.png wKioL1ePpgXwm_M3AABIp3C3NU8958.png](https://i-blog.csdnimg.cn/blog_migrate/657ab3a27864228c0193d716b25eaac1.png)
git add readme.txt
git add issue
git status
![9.png wKiom1ePpiWhDBF2AAAe4sfavEQ119.png](https://i-blog.csdnimg.cn/blog_migrate/1fc3f600631a5353032f2c989812ce79.png)
git commit -m 'v4' 提交
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
git status
![10.png wKioL1ePpkHSRNHFAAAmypTs7Vw999.png](https://i-blog.csdnimg.cn/blog_migrate/b98b165fb020810a91ce92b612f66656.png)
![11.png wKiom1ePpkKStYWSAAAgdt8Ex78875.png](https://i-blog.csdnimg.cn/blog_migrate/1a0c8ade41b9cdabc32ea785320a0699.png)
git的工作流程如下:
![12.png wKioL1ePpmSyv7f4AADsxBrgbpw340.png](https://i-blog.csdnimg.cn/blog_migrate/728ac7c84771c693fbd68e9be5065895.png)
![13.png wKiom1ePpmXQ16NaAADrHYcF8Bo539.png](https://i-blog.csdnimg.cn/blog_migrate/87908212ad7de5bfe7e6f398879fa595.png)
管理修改
第一次修改 -> git add
-> 第二次修改 -> git commit
你看,我们前面讲了,Git管理的是修改,当你用git add
命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit
只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
撤销修改
假如文件错误加了一行"Fuck stupid boss"则恢复的方法如下:
git checkout -- xx.txt
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
如果文件还没有git add xx.txt ,则checkout操作能回到修改前的版本(回到git commit版本)
如果git add xx.txt已经执行过来,则即便checkout也只能回到添加到暂存区的版本(回到git add版本)。回到老版本需要如下操作:
echo 'stupid boss' >> issue 模拟文件被错误的修改了
git add issue
![1.png wKioL1ePppTxN7clAAAajyB2u9U207.png](https://i-blog.csdnimg.cn/blog_migrate/532004864ea913a649883b1f76e07c27.png)
git reset HEAD issue
![2.png wKioL1ePppSgm-iPAAA-yGshht0855.png](https://i-blog.csdnimg.cn/blog_migrate/08df7faa978712d3e6bfe65f4b98aec1.png)
git status
![3.png wKiom1ePppSiFN9XAAA-yGshht0670.png](https://i-blog.csdnimg.cn/blog_migrate/75908171bd1690147e84ed9bd87268ce.png)
git checkout -- issue
cat issue
![1.png wKiom1ePptnAY0ocAAAa2Mhapuc682.png](https://i-blog.csdnimg.cn/blog_migrate/2c3bc9565a015733648961532f172cfb.png)
git status
![2.png wKioL1ePpsTg9gwgAAASKMdghgU408.png](https://i-blog.csdnimg.cn/blog_migrate/13a3d0d34025c66fc9278a8552585923.png)
cat issue
![3.png wKiom1ePpsSw_4xXAAASWYq5rN4355.png](https://i-blog.csdnimg.cn/blog_migrate/53745e4d755ffbf6f3956afc136e56bd.png)
小结
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file_name
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件
git add passwd
git commit -m 'add a passwd'
git status
![4.png wKioL1ePpvyBkhScAAAximTMNqU602.png](https://i-blog.csdnimg.cn/blog_migrate/e29e3c6d0bfa0a4a7a23f41fcc884311.png)
rm -f passwd 模拟删除操作
git status![5.png wKiom1ePpvzTTXKuAAA8HLBl4cI379.png](https://i-blog.csdnimg.cn/blog_migrate/d9755d7189f382498ec7ef59797e24ef.png)
可以看到git发现passwd这个文件被删除了。同时给出了提示可以执行git rm 或者git checkout
假如我们确实是要删除,则执行下述操作:
git rm passwd
git status
git commit -m 'rm passwd'
git status
![6.png wKioL1ePpx6DiRJZAABJlIjh5RA853.png](https://i-blog.csdnimg.cn/blog_migrate/81c443099ea80cb9533b04e82654d2df.png)
假如我们要恢复文件,则执行下述操作:
git checkout -- passwd 即可完成文件的恢复
![7.png wKiom1ePpx_QsrWpAAAc7Tdl3qk034.png](https://i-blog.csdnimg.cn/blog_migrate/50b88733d4a0d9bedd7454c2b43be478.png)
git checkout其实是用版本库里的版本替换了工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。