Git使用常见命令的理解和记录
2016-07-07 15:30
429 查看
git使用了很久,可是用到的功能基本上也就add commit push 这几个,趁着今天有点时间,把git的东西整理一下。
BTW,找了份git教程,需要看的直接去廖雪峰的网站看吧,附上链接:http://www.liaoxuefeng.com,我这里只是记下自己需要用的东西。
git是一个分布式版本控制系统,免去了不断自己更新版本号的麻烦,同时也帮助coder记下修改的地方。不过git的优秀主要还是由于它可以不需要中央服务器,本机即可当成一个代码库。互相之间推送本地的更新内容。其次就是由于它优秀的分支管理的实现,非常好用。
一、新建代码仓库Repositoy:git init
首先进入相应的文件夹,然后使用git init命令即可完成仓库的构建。然后用ls查看当前目录下的文件,可以发现已经多了一个.git的文件夹,这个.git目录就是用来跟踪和管理版本库的
二、将文件添加到仓库暂存区:git add
在当前目录下新建一个文本 test.txt, 然后将这个文本添加到仓库暂存区,使用git add 来实现。git代码库分为暂存区和工作区。当前的工作目录称之为工作区,
![](http://img.blog.csdn.net/20160707145852672)
git版本回退和版本控制都是在版本控制目录Master上进行的,而个人用户的本地修改是在工作区,可以先放到暂存区,当个人修改全部完了之后,再提交到版本库,方便和同事的协同工作,避免不完整的代码片段。
将文件添加到暂存区之后,使用git status查看暂存区的当前改动,可以看到,git给了提示:new了一个新文件,text.txt
如果想要查看当前工作区中的修改和上次的提交有什么不同,可以使用git diff查看详细的修改内容
三、将文件从暂存区提交到工作区:git commit
需要注意的是,文件的提交过程必须是首先从本地工作区提交到暂存区,然后从暂存区提交到版本库控制目录。如果暂存区没有文件,那么提交到版本库目录的内容也是空的。
从上面的反馈可以看出,做了一次提交,这次提交的提示信息是v1.0 new file,然后git告诉我,一个文件改变了,工作区中创建了test.txt
add的时候是向git暂存区添加文件,而commit则是从暂存区将文件提交给仓库管理目录
至此,代码仓库的新建和提交都完成了,下面写一下版本回退,毕竟提交了之后,万一想要回到之前的版本,也是可以的。
四、查看历史操作记录:git log
想要恢复到历史版本,我们首先应该知道历史都做了那些操作,使用git log来完成这个需求
五、版本回退:git reset
通过git reset可以改变工作区中的head指针,让它指向任意一个我们想要的文件
除了使用head^表示上一个提交的版本之外,还可以直接使用版本号去定位head指针。
当前的head指针指向的是版本一,然后现在我们又想要回到版本二去,如下,使用commit reset --hard commidID
然后再用cat查看文件,发现又回到了我们想要的版本2文件。
六、git checkout用暂存区覆盖本地工作区
对git checkout理解有点模糊,这里先记下几个命令吧
注意到,如果是某个文件commit了,那么它一定能在版本目录中找到,不用担心丢失。
我个人的理解是:
用git reset将版本库中的文件覆盖暂存区
用git checkout将暂存区中的文件覆盖本地工作区
七、从版本库中删除文件:git rm
删除文件 git rm,注意这里也只是当前分支中删除了文件,如果想要恢复,只要找到之前的版本,reset一下就行了
我们打印一下仓库目录的日志:
当想要重新恢复的时候,只要同步版本库和暂存区,然后再同步暂存区和工作区就可以了。
BTW,找了份git教程,需要看的直接去廖雪峰的网站看吧,附上链接:http://www.liaoxuefeng.com,我这里只是记下自己需要用的东西。
git是一个分布式版本控制系统,免去了不断自己更新版本号的麻烦,同时也帮助coder记下修改的地方。不过git的优秀主要还是由于它可以不需要中央服务器,本机即可当成一个代码库。互相之间推送本地的更新内容。其次就是由于它优秀的分支管理的实现,非常好用。
一、新建代码仓库Repositoy:git init
admin@admin-PC MINGW64 /d/Git/Work (master) $ cd test admin@admin-PC MINGW64 /d/Git/Work/test (master) $ git init Initialized empty Git repository in D:/Git/Work/test/.git/ admin@admin-PC MINGW64 /d/Git/Work/test (master) $ ls -ah ./ ../ .git/
首先进入相应的文件夹,然后使用git init命令即可完成仓库的构建。然后用ls查看当前目录下的文件,可以发现已经多了一个.git的文件夹,这个.git目录就是用来跟踪和管理版本库的
二、将文件添加到仓库暂存区:git add
在当前目录下新建一个文本 test.txt, 然后将这个文本添加到仓库暂存区,使用git add 来实现。git代码库分为暂存区和工作区。当前的工作目录称之为工作区,
git版本回退和版本控制都是在版本控制目录Master上进行的,而个人用户的本地修改是在工作区,可以先放到暂存区,当个人修改全部完了之后,再提交到版本库,方便和同事的协同工作,避免不完整的代码片段。
admin@admin-PC MINGW64 /d/Git/Work/test (master) $ git add test.txt admin@admin-PC MINGW64 /d/Git/Work/test (master) $ git add . admin@admin-PC MINGW64 /d/Git/Work/test (master) $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: test.txt如上,可以使用git add test.txt,也可以使用git add . 不同的是前者只添加了一个文件,后者是添加了当前目录中的所有文件
将文件添加到暂存区之后,使用git status查看暂存区的当前改动,可以看到,git给了提示:new了一个新文件,text.txt
如果想要查看当前工作区中的修改和上次的提交有什么不同,可以使用git diff查看详细的修改内容
admin@admin-PC MINGW64 /d/Git/Work/test (master) $ git diff head diff --git a/test.txt b/test.txt index d2c6b47..bb3b471 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ -new test.txt --version 1.0 \ No newline at end of file +new test.txt --version 1.0 +modify 1'st --version 2.0这里使用了git diff head 判断当前的暂存区中的文档和工作区中head指向的文本之间的不同,可以看出,git给出了回应:工作区中的head指针指向的文本与当前暂存区中的文本相比:No newline at end of file,文件末尾缺少一行,并且展示了两个文件的详细内容
三、将文件从暂存区提交到工作区:git commit
需要注意的是,文件的提交过程必须是首先从本地工作区提交到暂存区,然后从暂存区提交到版本库控制目录。如果暂存区没有文件,那么提交到版本库目录的内容也是空的。
admin@admin-PC MINGW64 /d/Git/Work/test (master) $ git commit -m "v1.0 new file" [master (root-commit) 714bd8a] v1.0 new file 1 file changed, 1 insertion(+) create mode 100644 test.txt使用git commit -m “message”,其中-m后面的参数是当前提交的说明,为了方便协同工作的时候,同事理解你的提交,这个message的内容最好是要写的。
从上面的反馈可以看出,做了一次提交,这次提交的提示信息是v1.0 new file,然后git告诉我,一个文件改变了,工作区中创建了test.txt
add的时候是向git暂存区添加文件,而commit则是从暂存区将文件提交给仓库管理目录
至此,代码仓库的新建和提交都完成了,下面写一下版本回退,毕竟提交了之后,万一想要回到之前的版本,也是可以的。
四、查看历史操作记录:git log
想要恢复到历史版本,我们首先应该知道历史都做了那些操作,使用git log来完成这个需求
admin@admin-PC MINGW64 /d/Git/Work/test (master) $ git log commit f2c81d903aeaf50b74db3ec0bf641dce8692373b Author: blyang <clear_d@163.com> Date: Thu Jul 7 14:11:00 2016 +0800 v2,0 add one line commit 714bd8a98127db6ca78dde70ea0922560ca8712a Author: blyang <clear_d@163.com> Date: Thu Jul 7 13:48:52 2016 +0800 v1.0 new file admin@admin-PC MINGW64 /d/Git/Work/test (master) $从上面的反馈可以看出,历史进行了两次提交到工作区的操作。注意到,git log只能记录提交到工作区的操作,提交到暂存区的操作是不会被记录的。而现在,工作区中的head指针是指向第二次修改后的文本的,也就是记录上显示的v2.0的文件。commit后面的那一长串十六进制的数字,表示的是文件的版本号
五、版本回退:git reset
通过git reset可以改变工作区中的head指针,让它指向任意一个我们想要的文件
admin@admin-PC MINGW64 /d/Git/Work/test (master) $ cat test.txt new test.txt --version 1.0 modify 1'st --version 2.0 admin@admin-PC MINGW64 /d/Git/Work/test (master) $ git reset --hard head^ HEAD is now at 714bd8a v1.0 new file admin@admin-PC MINGW64 /d/Git/Work/test (master) $ cat test.txt new test.txt --version 1.0如上所示,刚开始用cat获取一下文件的内容,显示的是版本2的内容,然后用git reset --hard head^来重置head指针使之指向上一个提交的文件,然后再用cat获取一次文件内容,发现文件内容已经改变了,也就是文件版本已经回到了之前的版本
除了使用head^表示上一个提交的版本之外,还可以直接使用版本号去定位head指针。
当前的head指针指向的是版本一,然后现在我们又想要回到版本二去,如下,使用commit reset --hard commidID
admin@admin-PC MINGW64 /d/Git/Work/test (master) $ git reflog 714bd8a HEAD@{0}: reset: moving to head^ f2c81d9 HEAD@{1}: commit: v2,0 add one line 714bd8a HEAD@{2}: commit (initial): v1.0 new file admin@admin-PC MINGW64 /d/Git/Work/test (master) $ git reset --hard f2c8 HEAD is now at f2c81d9 v2,0 add one line admin@admin-PC MINGW64 /d/Git/Work/test (master) $ cat test.txt new test.txt --version 1.0 modify 1'st --version 2.0我们首先用git reflog找出历史操作的记录,然后找到版本二对应的版本号,使用git reset --hard commitID恢复到我们想要的文件。这里显示的版本号只是一个缩写,也不用写全,git会自己去匹配查找。
然后再用cat查看文件,发现又回到了我们想要的版本2文件。
六、git checkout用暂存区覆盖本地工作区
对git checkout理解有点模糊,这里先记下几个命令吧
$ git checkout -- test.txt用暂存区的文件来覆盖工作区中的文件,相当于取消自上次add file以来所有的本地操作
注意到,如果是某个文件commit了,那么它一定能在版本目录中找到,不用担心丢失。
我个人的理解是:
用git reset将版本库中的文件覆盖暂存区
用git checkout将暂存区中的文件覆盖本地工作区
七、从版本库中删除文件:git rm
删除文件 git rm,注意这里也只是当前分支中删除了文件,如果想要恢复,只要找到之前的版本,reset一下就行了
admin@admin-PC MINGW64 /d/Git/Work/test ((a5f0f87...)) $ rm test.txt admin@admin-PC MINGW64 /d/Git/Work/test ((a5f0f87...)) $ git diff diff --git a/test.txt b/test.txt deleted file mode 100644 index dc762e2..0000000 --- a/test.txt +++ /dev/null @@ -1,3 +0,0 @@ -new test.txt --version 1.0 -modify 1'st --version 2.0 -modify 2'st --version 3.0 admin@admin-PC MINGW64 /d/Git/Work/test ((a5f0f87...)) $ git commit -m "delete" HEAD detached at head Changes not staged for commit: deleted: test.txt no changes added to commit admin@admin-PC MINGW64 /d/Git/Work/test ((a5f0f87...)) $ git add . admin@admin-PC MINGW64 /d/Git/Work/test ((a5f0f87...)) $ git commit -m "delete head" [detached HEAD d22a561] delete head 1 file changed, 3 deletions(-) delete mode 100644 test.txt如上,将文件删除掉,在提交之后,此时新的版本库里面已经没有这个文件了
我们打印一下仓库目录的日志:
admin@admin-PC MINGW64 /d/Git/Work/test ((d22a561...)) $ git log commit d22a5612e2e92b54ff3f1df70cd7a100905abea2 Author: blyang <clear_d@163.com> Date: Thu Jul 7 15:23:53 2016 +0800 delete head commit a5f0f8755bd1f5cb5b19a4322f93ce042693be0d Author: blyang <clear_d@163.com> Date: Thu Jul 7 14:44:08 2016 +0800 v3.0 add one line more commit f2c81d903aeaf50b74db3ec0bf641dce8692373b Author: blyang <clear_d@163.com> Date: Thu Jul 7 14:11:00 2016 +0800 v2,0 add one line commit 714bd8a98127db6ca78dde70ea0922560ca8712a Author: blyang <clear_d@163.com> Date: Thu Jul 7 13:48:52 2016 +0800 v1.0 new file如上,可以看到最新的目录已经删除了文件。
当想要重新恢复的时候,只要同步版本库和暂存区,然后再同步暂存区和工作区就可以了。
相关文章推荐
- Win7下硬盘安装Ubuntu双系统
- Inno Setup软件安装打包
- C#抓取天气数据
- 解决跨域访问问题
- BZOJ4113 : [Wf2015]Qanat
- android的消息处理机制——Looper,Handler,Message
- 成为程序界的叶问,你需要打败这十个人
- 自定义控件二
- JAVA三个线程依次打印ABC
- mongodb 主从切换
- centos yum安装ssl证书可供ios app下载使用
- 显示和隐藏table中的border
- JNI官方规范中文版——从一个简单的例子开始
- Oracle 查询类似 select top 的用法
- Http幂等性
- asp.net ajax get post 中文乱码解决办法
- 简单掌握Python的Collections模块中counter结构的用法
- 在互联网时代,你是消费者还是创造者?
- 解决数据库性能瓶颈的几种方法 - NoSql视角(草稿)
- XPath学习:基本语法(一)