GIT学习总结

GIT学习总结

19 3 月, 2015 阅读 583 字数 4776 评论 0 喜欢 3

 

说明:

1.本人的GIT知识主要是在:廖雪峰的官方网站—Git教程?上学习的,总结的内容都是在他的教程上总结的,文章中大量引用了他的话(因为懒引用的地方都没有做标注,希望原作者原谅一下。)

2.如果你看本文是想学习GIT ,那么我还是建议你到廖雪峰的官方网站去学。本文适合学习过GIT 但长时间没有使用的朋友,做复习回忆使用。

u=824257206,79353290&fm=21&gp=0

一.安装GIT

(一)?? 在Linux上安装Git

首先,你可以试着输入git,看看系统有没有安装Git:

$ git

The program ‘git’ is currently not installed. You can install it by typing:

sudo apt-get install git

像上面的命令,有很多Linux会友好地告诉你Git没有安装,还会告诉你如何安装Git。

(二)?? Debian或Ubuntu安装GIT

sudo apt-get install git[/dt_highlight]就可以直接完成Git的安装,非常简单。

(三)? Mac OS X安装Git

方法一:

安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。

方法二:

推荐,从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装。运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

(四)在Windows安装Git

msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:

$ git config – -global user.name “Your Name”

$ git config – -global user.email “email@example.com”

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

注意git config命令的- -global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

二.创建本地仓库 及 初始化GIT

(一)?? 创建本地仓库

首先,在你要创建仓库的目录,创建一个空目录(名字由你定了,这里例子是:odinms):

$ mkdir odinms

$ cd odinms

$ pwd

/Users/zhouyu/odinms

pwd命令用于显示当前目录。这个仓库位于/Users/zhouyu /odinms。

Windows系统,为了避免遇到各种莫名其妙的问题,请确保路径中不要出现中文。

(二)? 初始化GIT

git init命令把上面创建的空目录变成Git可以管理的仓库:

$ git init

Initialized empty Git repository in /Users/zhouyu/odinms/.git/

目录下多出来的.git的目录,是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,错误修改可能破坏 Git仓库。

小结:这里init的作用就是告诉GIT,你建的这个目录不是一个普通的目录,这是一个GIT仓库

 

三.添加文件到GIT

添加文件到Git仓库,分两步:

1) ? ? 使用命令git add <file>

2)???? 使用命令git commit –m “这次提交的一个简要说明”,提交确认之间之前的文件。

注意,可反复使用,添加多个文件后,最后一起commit确认。

Q: 为什么已经都告诉了GIT整个目录都是仓库了,还需要git add <file>、 git commit –m “这次提交的一个简要说明” 呢?

A: 目的是为了告诉仓库哪些文件我是需要检测变动的,哪些不需要,节省一些资源。

 

四.状态查看

(一)git status命令:

查看仓库状态,可以告诉你有无文件被修改过。

(二)git diff命令:

顾名思义就是查看difference,查看上次修改的内容。

 

五.版本退回

(一) ?git log命令:

显示从最近到最远的提交日志。、

– -pretty=oneline参数:

erw

3628164…882e1e0的是commit id(版本号)

和SVN不同,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。

Q: 为什么commit id需要用这么一大串数字表示呢?

A: 因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

(二) ?git reset命令:

从当前版本回退到之前的版本“

– -hard[/dt_highlight]参数:

下面以四个例子来介绍- -hard参数的使用方法:

– -hard ea34578回到commit id为ea34578的版本

– -hard HEAD^回到上个的版本

– -hard HEAD^^回到上上个的版本

– -hard HEAD~100回到往上100个版本

HEAD则表示是当前版本的意思。

Q:回退后又想恢复之前版本怎么办?

A:在回退前先记住之前的commit id。 不然,真的没有什么好办法了。

 

(三) git reflog命令

记录每一次都用了什么命令,用于查找commit id (回到未来版本):

$ git reflog

ea34578 HEAD@{0}: reset: moving to HEAD^

3628164 HEAD@{1}: commit: append GPL

ea34578 HEAD@{2}: commit: add distributed

cb926e7 HEAD@{3}: commit (initial): wrote a readme file

 

六.放弃工作区的修改(Unstage)

git checkout命令:

1) ? 不带任何参数

“创建一个新分支”。

2) ?- -参数

作用:丢弃工作区的修改

示例:

git checkout – -?a.txt意思就是,把a.txt文件在工作区的修改全部撤销.

这里有两种情况:

情况一:a.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

情况二:a.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

3) ? ?-b参数

作用:创建并切换到某个分支

示例:

git checkout -b dev意思就是,创建dev分支,然后切换到dev分支。

相当于以下两条命令:

$ git branch dev

$ git checkout dev

Switched to branch ‘dev’

 

七.放弃暂存区的修改

这里只需要使用之前学过的git reset HEAD命令

示例:

git reset HEAD a.txt

小结:当放弃暂存区后,若还想放弃工作区还需进行放弃工作区的修改。

 

八.删除文件

(一)?? 正常删除

步骤1:rm a.txt首先,在文件夹中删除a.txt这个文件

步骤2:git status然后,查看一下状态改变

步骤3:git rm a.txt 在GIT仓库中删除这个文件

步骤4:git commit -m ”说明” commit确认删除

(二)?? 误删恢复

这个就很简单了:git checkout – – a.txt

原理:用版本库里的版本替换工作区的版本。

 

九.远程仓库(本地篇)

(一)?? 创建SSH Key:

在远程仓库上的身份识别信息就靠这个了。

创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件。

如果已经有了,可直接跳到下一步。

如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

ssh -keygen -t rsa -C “youremail@example.com”

GitHub的RSA Key的指纹信息

(二)?? 关联远程仓库:

git remote命令:

git remote add origin 关联URL

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

(三)?? 把本地库推送到远程库中:

git push命令:

1) ? -u参数

Git会把本地的master分支内容推送的远程新的master分支,同时把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。(在远程创建并分支,并与本地关联)

2) ? 不带任何参数

把当前分支修改推送到远程。

小结:第一次推送到新的分支:git push -u origin 需要推送的分支名称

第二次及以后推送分支:git push origin 需要推送的分支名称

 

十.从远程库克隆(抓取)

git clone命令:

git clone关联URL

 

十一.分支管理

GIT类似于一个仓库,每个文件的历史的版本都存在里面。

版本:一个在不同文件版本上的映射集合就是一个版本。

分支:类似于平行宇宙中相同事物的别名(平行空间同一个人(项目),但是有不同的人生经历(代码))

 

(一)?? 创建分支

git checkout -b dev或git branch dev、git checkout dev

git branch命令:

查看某个分支。

1) ? ?不带任何参数

示例:

git branch dev创建DEV分支

git branch *查看当前分支

2) ?-d参数

正常删除分支

git branch -d <name>

3) -D参数

强行删除分支

(二)?? 同步分支

git merge命令:

用于合并指定分支到当前分支。

示例:

git merge 分支名称(被同步的分支B)B- ->A把B 同步到A:

– -no-ff参数,表示禁用Fast forward

合并分支时,加上- -no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并

git log – -graph命令可以看到分支合并图

小结:同步分支前,先切换到需同步的分支(A)

(三)?? 删除分支

git branch -d <name>

(四)?? 查看远程库的分支

git remote -v

(五)?? 抓取远程Origin的dev分支到本地

步骤1:git checkout -b dev origin/dev

创建远程origin的dev分支到本地

步骤2:git push origin dev

推送dev分支到远程库

步骤3:完成。

PS:1. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

2. .如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

小结:若git pull 提示“no tracking Information”,说明本地分支与远程分支为关联。

使用:git branch – -set-upstream dev origin/dev解决。

 

十二. Stash功能

(一) ? git stash 命令:

git stash把工作现场“储存”起来。

git stash list 查看STASH列表

git stash apply ?<stash@{id}>恢复

git stash drop <stash@{id}>删除

git stash pop <stash@{id}>恢复并删除STASH,默认恢复最新

(二)?? stash 创建分支:

git stash branch 分支名称

发表回复

蜀ICP备15005542号