什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。
a.管理修改
对于提交修改,其实和正常提交文件一样的操作,先提交到本地版本库:
$ git add test.txt
$ git commit -m "我新增了文字哦"
然后在从本地版本库提交到github的仓库:
$ git push origin master
PS:这里有个值得注意的地方,如果之前本地没有进行过提交到Git仓库,则执行:
$ git push -u origin master
b.撤销修改
在实际工作中,我们会不断对文件进行修改,然后不断提交修改到本地版本库,也就是不断执行这2个操作:
$ git add readme.txt
$ git commit -m "第一次修改"
如果发现我们有提交错了,可以通过Git版本回退,返回某个历史版本。现在,我们回顾一下test.txt
文件一共有几个版本被提交到Git仓库里了:
$ git log
commit a2b692126034f2e77f0e30d5fdf4596e2ebe1ddb
Author: shiyubushiyu <shiyubushiyu.li@163.com>
Date: Fri Aug :: + 第三次修改 commit 720d7fcf1e4ba21ff2aea93b9ba29dcba3ce4066
Author: shiyubushiyu<shiyubushiyu.li@163.com>
Date: Fri Aug :: + 第二次修改 commit b3228c156a98d211207e3c5af4392c12718d0f8d
Author: shiyubushiyu<shuyubushiyu.li@163.com>
Date: Fri Aug :: + 第一次修改
可以看到最近有3次修改,下面来看看怎么返回某个指定的版本,
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交1094adb...
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
现在,我们要把当前版本(第三次修改)回退到上一个版本
(第二次修改)
,就可以使用git reset
命令:
$ git reset --hard HEAD^
HEAD is now at 720d7fc 第二次修改
然后我们可以去test.txt看看是不是被还原到第二次修改了,答案是肯定的。
那版本回退之后,我后悔了肿么办,我想回到第三次修改肿么办呢?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个(第三次修改)
的commit id
是a2b69...
,于是就可以指定回到未来的某个版本:
$ git reset --hard a2b69
HEAD is now at a2b6921 第三次修改
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
然后看看是否改回第三次了呢:
$ cat test.txt
你好,世界!
开始第三次修改
c.删除文件
用rm
命令删除文件(新文件.txt):
$ git add 新文件.txt
$ git commit -m "remo"
然后:
$ rm
新文件
.txt
$ git commit -m "删除了文件"
[master fb14c3a] 删除了文件
file changed, deletion(-)
delete mode "\346\226\260\346\226\207\344\273\266.txt"
然后:
$ git rm 新文件.txt
rm '新文件.txt'
$ git commit -m "remo"
[master 72774be] remo
file changed, deletions(-)
delete mode 新文件.txt
最后:
$ git push origin master
Counting objects: , done.
Delta compression using up to threads.
Compressing objects: % (/), done.
Writing objects: % (/), bytes | bytes/s, done.
Total (delta ), reused (delta )
To git@github.com:yy-biboy/learnGitt.git
0f71c49..72774be master -> master
这样就彻底删除了 新文件.txt
so,就是这么简单~