Git使用教程

一、Git简介

Git是目前世界上最先进的分布式版本控制系统。

二、Git 安装

见:
 官网:http://www.git-scm.com/book/zh/v2
 廖雪峰官方网站:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000

三、Git的使用

1 创建仓库

$ mkdir learngit       //为仓库建一个目录 
$ git init                 //初始化

2 添加文件到仓库

$ git add  <file>
$ git commit   -m “note xxxx”       //提交到仓库

3 配置仓库

配置文件:
 /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。

配置命令: $ git config --system
 ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。

配置命令: $ git config --global
 .git/config文件:当前项目的 Git 目录中的配置文件(也就是工作目录中 .git/config 文件):这里的配置仅仅针对当前项目有效。
每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

4 常见的配置项:

 用户信息
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 –global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

 文本编辑器
接下来要设置的是默认使用的文本编辑器。Git 需要你输入一些额外消息的时候,会自动调用一个外部文本编辑器给你用。默认会使用操作系统指定的默认编辑器,一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置:
$ git config --global core.editor emacs

 差异分析工具
还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:
$ git config --global merge.tool vimdiff
Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。

 查看配置信息
要检查已有的配置信息,可以使用 git config –list 命令:

$ git config --list
user.name=Scott Chacon
user.email=schacon@gmail.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。
也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:

$ git config user.name
Scott Chacon

5 版本管理

$ git log                  //查看版本库的状态
$ git log --pretty=oneline  //单行显示版本库
$ git reset –hard HEAD^    //回到上个版本,几个^就表示前几个版本,前100个:HEAD~100
$ git reset –hard <commit id> //回到指定的commit ID的版本,可以不写全,但要是唯一的

回到上一个版本后,又想还原回去
 若终端没有关闭,看上面还有不有git log 显示的刚才版本的commit ID,有的话
$ git reset –hard <commit id>
 关闭了终端,不知道commit ID
$ git reflog //查看输入命令的历史记录,找出之前版本的commit ID 再回去

6 工作区和暂存区

两个部分组成:工作区、版本库(由暂存区和分支区)

 工作区:就是之前新建的目录,保存代码的
 版本库:在 .get 文件中,包含了stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

$ git add       //将文件由工作区提交到stage
$ git commit    //将文件由stage 提交到master ,这是就形成了新的分支了。

7 撤销修改

 场景1:当你改乱了工作区某个文件的内容,但是没有提交到暂存区(即没有用git add),想直接丢弃工作区的修改时,用命令 $ git checkout -- file
 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时(即用了git add),想丢弃修改,分两步,
a.将用分支版本还原暂存区,用命令$ git reset HEAD file,就回到了场景1
b.将用暂存区还原工作区,场景1操作,用命令 $ git checkout -- file
 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。命令:$ git reset –hard HEAD^ //回到上个版本

8 删除文件

 删除已经提交到版本库的文件 (使用了git add 、git commit)
步骤:
1.删除工作区的文件 $ rm file
2.删除版本库内的文件 $ git rm file 并提交 $ git commit
 删除只提交到暂存区的
见6、撤销修改中的场景2 $ git reset HEAD file

9 远程仓库(git与github相连)

a.在github上新建一个仓库
登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库。
b.在本地建立一个仓库

$ mkdir test
$ git init
$ git config –global user.email “xxxx@xxx$ git config –global user.name “xxx”
$ vim readme.txt
$ git add readme.txt
$ git commit –m “initial”

c.设置ssh秘钥
 创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。
$ ssh-keygen -t rsa -C youremail@example.com
 登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容(id_rsa.pub在用户主目录下的.ssh中(~/.ssh))。
d.将本地仓库同步到github
在本地的仓库中运行:
$ git remote add origin git@github.com:Backwit/learngit.git
其中Backwit 是github用户名,learngit是github上创建的仓库名。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
e.就可以把本地库的所有内容推送到远程库上:
$ git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
以后提交git push origin master,把本地master分支的最新修改推送至GitHub,要是其他分支,见“分支管理-多人协作“
错误:遇到了一些乱七八糟的错误,删了重头建就好了,真是莫名其妙!!
$ git remote rm origin //git 远程的 orgin 删除掉

10 远程库克隆

条件:有个远程库(本地不需要先建一个库),并且远程库上有你的ssh的公钥(这里应该是权限的问题,我克隆网上的其他库都是可以的)。
$ git clone git@github.com:Backwit/learngit.git

11 分支管理

创建与合并分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name> //将当前分支复制成分支<name>
删除分支:git branch -d <name>

解决冲突
冲突:两个分支均对同一文件做了修改,无法自动融合时产生冲突。必须手动解决。
$ git log –graph //分支合并图
融合的时候加上 –no-ff 这样在分支历史上就可以看出分支信息
$ git merge –no-ff branchname

BUG分支
当你要在其他分支上修改BUG,而本分支上的事情正在做,且没做完,也不能提交。用git stash 来保存现场,做完了再回来恢复现场。
保存现场:git stash
恢复现场:
git stash apply恢复,
git stash drop来删除备份的现场
git stash pop恢复现场并删除备份的现场
查看备份列表:git stash list

 Feature分支
软件开发中,总有无穷无尽的新的功能要不断添加进来。
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
若突然要删除此分支,且分支没有融合,这时可以强制删除此分支git branch -D <name>

多人协作
 查看远程库的信息:用git remote,用git remote -v显示更详细的信息。
 推送分支,就是把该分支上的所有本地提交推送到远程库。
$ git push origin master
$ git push origin dev //推送其他分支

抓取分支
默认情况下git clone,只能看到主分支master。在本地创建和远程分支对应的分支,使用 $ git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致。

多人协作的工作模式通常是:
a.可以试图用 $ git push origin branch-name推送自己的修改;
b.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;这里 $ git pull origin branch-name或者直接 $ git pull抓取所有的,git pull的同时,会融合所有不同的,有冲突的会提示修改
c.如果合并有冲突,则解决冲突,并在本地提交;(无需git merge)
d.没有冲突或者解决掉冲突后,再用$ git push origin branch-name推送就能成功!
e.如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,建立本地分支和远程分支的关联,使用$ git branch --set-upstream branch-name origin/branch-name

12 标签管理

新建标签
$ git tag <name>//默认名为HEAD
$ git tag <name> <commit id> //对特定commit id的版本创建标签
指定标签信息
$ git tag -a <tagname> -m "blablabla..."
用PGP签名标签(必须首先安装gpg(GnuPG))
$ git tag -s <tagname> -m "blablabla..."
查看所有标签
$ git tag 
$ git show <tagname>     //可以看到说明文字
删除标签
$ git tag -d v0.1
删除远程库中的标签
$ git tag -d v0.9      //删除本地标签
$ git push origin :refs/tags/v0.9  //删除远程库的标签
要看看是否真的从远程库删除了标签,可以登陆GitHub查看
推送某个标签到远程
$ git push origin <tagname>
一次性推送全部尚未推送到远程的本地标签
$ git push origin –tags

13 GitHub使用

首先fork,将开源库拷贝到自己的github上;再克隆到本地;可以推送pull request给官方仓库来贡献代码。

14 自定义Git

 使Git显示颜色

$ git config --global color.ui true

 忽略特殊文件(用到再看吧)
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758404317281e54b6f5375640abbb11e67be4cd49e0000
忽略某些文件时,需要编写.gitignore;.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
 配置别名
 命令行配置别名

$ git config --global alias.st status      //用st表示status
$ git config --global alias.last 'log -1'  //配置一个git last,让其显示最后一次提交信息

 直接修改配置文件来配置别名
在配置文件.git/config或是.gitconfig中直接改
这里写图片描述

15 架设Git服务器

查看以下网站:
http://www.git-scm.com/book/zh/v1/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E6%9E%B6%E8%AE%BE%E6%9C%8D%E5%8A%A1%E5%99%A8
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000

四、参考文献

[1] Git官方网站:http://www.git-scm.com/book/zh/v1
[2] 廖雪峰官网:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值