Git学习总结
Posted 新梦起航
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git学习总结相关的知识,希望对你有一定的参考价值。
今天看了一篇廖雪峰的Git教程,在此总结一下自己所学及遇到的问题。其学习教程地址:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
关于安装Git教程就不说了,详见http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
创建版本库:
首先,选择一个合适的地方,创建一个空目录:
<span style="font-size:24px;">
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit</span>
pwd 命令用于显示当前目录。
如果使用的是Windows系统,为避免遇到哦各种莫名其妙的问题,确保目录名(包括父目录)不包含中文。
第二步:通过git init命令把这个目录变成Git可以管理的仓库:(初始化Git仓库)
<span style="font-size:24px;">$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/</span>
添加文件到Git仓库,分两步:
第一步:使用命令git add <file>注意可反复多次使用添加多个文件
第二部:使用命令git commit 完成
例:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files.
时光机穿梭:
git status
命令可以让我们时刻掌握仓库当前的状态。
如果
git status
告诉你有文件被修改过,用
git diff
可以查看修改内容
版本回退:
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD
指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL
:
改为指向add distributed
:
然后顺便把工作区的文件更新了。所以你让HEAD
指向哪个版本号,你就把当前版本定位在哪。
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
</pre><pre code_snippet_id="1766352" snippet_file_name="blog_20160716_6_8111568" name="code" class="java">$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 15:11:49 2013 +0800
append GPL
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 14:53:12 2013 +0800
add distributed
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 19 17:51:55 2013 +0800
wrote a readme file
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上
--pretty=oneline
参数
:
<span style="font-size:24px;">$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file</span>
在Git中,用
HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
工作区和暂存区
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
管理修改
如果不add
到暂存区,那就不会加入到commit
中
撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命
令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件:
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm
命令删了:
<span style="font-size:24px;"> $ rm test.txt</span>
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,
git status
命令会立刻告诉你哪些文件 被删除了:现在你有两个选择,一是确实要从版本库中删除该文件,那就使用命令git rm 删掉,并且 git commit
<span style="font-size:24px;color:#330000;">$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt</span>
现在文件就从版本库中彻底删除了。
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
远程仓库:
首先需要一个github账号,就可以免费获得Git远程服务器(当然也可以使用自己建立
的Git服务器)由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容:
点“Add Key”,你就应该看到已经添加的Key:
添加远程仓库:
1、要关联一个远程库
<span style="font-size:24px;">$ git remote add origin <你的远程仓库的地址></span>
2、
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
从远程克隆:
$ git clone <远程仓库的地址>
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
$ cd gitskills
$ ls
README.md
远程仓库的地址格式:
1、https://github.com/mahuiying/gitskills.git
2、
git@github.com:mahuiying/gitskills.git
Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快。
在国内使用第二种方式网速不好的话,会不成功。
以上是关于Git学习总结的主要内容,如果未能解决你的问题,请参考以下文章