码迷,mamicode.com
首页 > 其他好文 > 详细

Git学习总结

时间:2016-07-17 00:45:44      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:

今天看了一篇廖雪峰的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_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_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学习总结

标签:

原文地址:http://blog.csdn.net/ydxzmhy/article/details/51926019

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!