git基础命令

总结一下git的命令和个人理解

##安装git
Windows上安装git
可以从git官网下载安装,一直默认即可。
在开始菜单中找到Git Bash 点击后会出现命令行窗体(可以看到版本号)
如图
安装完成后进行配置,命令行输入:

1
2
git config --global user.name "Your Name"
git config --global user.email "email@example.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

##说一下git clone
git clone支持https和git(即ssh)两种方式下载源码:

当使用git方式下载时,如果没有配置过ssh key,则会有如下错误提示:
如图
介绍一下如何配置git的ssh key

首先检查一下刚刚的用户名邮箱:

1
git config --global --list

如图

然后执行以下命令生成秘钥:

1
ssh-keygen -t rsa -C "你的邮箱"

点击回车需要几步操作:

1.确认秘钥的保存路径(如果不需要改路径则直接回车);

2.如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);

3.创建密码(如果不需要密码则直接回车);

4.确认密码;

如图
在指定路径下会有id_rsa和id_rsa.pub两个文件
如图
打开你的github点击头像->settings左侧列表的SSH and GPG keys 点击绿色的New SSH key
如图
然后用文本工具打开之前生成的id_rsa.pub文件,把内容拷贝到key下面的输入框,并为这个key定义一个名称(通常用来区分不同主机),然后保存:
如图
尝试用git方式下载,可以看到已经可以正常下载:
如图

以上几步完成以后此时你就和git有了一对一联系,上传下载就如同有了令牌一样

git的基本命令

git是什么

git是一种版本控制器. 更直白说,团队开发时,管理代码用的软件.

说一下安装

Window环境:
https://git-for-windows.github.io/ 下载软件, 双击,一路”Next”,安装完毕. 到开始菜单找”git bash”,如下图
如图
如图
Linux环境安装git:

1
2
# ubuntu,debian#
$ sudo apt-get install git

centos,redhat系统

1
# yum install git

代码管理

创建版本库

1
2
3
$ cd E:/ (集成环境进入到www目录下)
$ mkdir test
$ git init

注意:
不要把仓库建在中文目录下,可能出问题.
.git是个隐藏目录,不要乱碰.(你的每一次代码修改它都帮你记录着呢)

添加文件

在刚刚创建的test目下创建一个index.php如图:
如图
查看仓库状态

1
$ git status

可见,此时git发现有一个新文件,但并没有把此文件纳入管理. 我们需要两步,让git仓库管理index.php
git add index.php
把index.php提交到暂存区
git commit -m “新建index.php”
把index.php提交到版本库

1
2
$ git add index.php
$ git commit -m "新建index.php"

如图

修改文件

修改后的文件需要重新提交到暂存区然后到版本库

1
2
$ git add index.php
$ git commit -m "修改第2行"

删除文件

用rm命令删除文件,并直接commit,提交到版本库
例:先创建一个foo.php,供练习删除用

1
2
3
4
5
6
7
8
9
10
11
12
13
$ touch foo.php # 创建foo.php
$ git add foo.php $ git commit -m "练习删除用"
$ ls
foo.php index.php
# 开始删除
$ git rm foo.php
rm 'foo.php'
$ git commit -m "删除foo.php"
[master e4dc37c] 删除foo.php
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 foo.php
$ ls
index.php

远程仓库

经过前面的练习,你在本地的仓库里管理代码已经比较熟练了.
但如果是团队开发,如何配合起来呢?
我们可以把版本仓库放在互联网上. 开发者把自己最新的版本推到线上仓库, 同时,把线上仓库的最新代码,拉到自己本地. 这样,就可以配合工作了.

注册git在线仓库的账号

国外: http://www.github.com
国内: http://git.oschina.net

创建项目

注册后,”新建项目”,我们先建一个测试项目
如图
为此项目提供的仓库地址有2个.
http地址:https://github.com/876205350/lianxi.git
ssh地址: git@github.com:876205350/lianxi.git
前面因为ssh key已经配好使用ssh更方便不过下面我们依然使用http地址

把代码推送到远程仓库

为本地库添加远程库
$ git remote add origin https://github.com/876205350/lianxi.git
意思是:添加1个远程库,代号是origin,地址是 https://....lianxi.git
push 推代码
$git push -u origin master 意思是,把本地的版本(默认是master),推到代号为origin的远程库去.
这个过程会弹出github登录框,让你输入用户名/密码
如图
以后再使用http就不用输入账号密码

代码管理

学习git,你必须要了解3个重要区域.
工作区, 即开发者的工作目录.
暂存区, 修改已被记录,但尚未录入版本库的区域.
版本库, 存储变化日志及版本信息.

工作区->add->到暂存区->commit->仓库

文件操作

添加多个文件
git add #添加file1,file2
git add *.txt #添加当前目录下的.txt文档
git add . #添加当前目录的所有变化

删除文件
git rm

移动或改名
git mv 源文件 新文件

移动:git mv config.php ./inc/config.php
改名:git mv config.php config.inc.php

改动日志

每个文件/目录发生的版本变化,我们都可以追溯.
命令为:”git log “
常用格式: git log 查看项目的日志
git log 查看某文件的日志
git log . 查看本目录的日志
例: git log 显示如下:

1
2
3
4
5
6
7
8
9
10
11
12
commit 37285a5a9bc5b62609c5e81dacc4daafab1b9600
Author: lucy <lucy@xx.com>
Date: Thu Nov 12 17:09:04 2015 +0800
new readme.txt
...
...
commit c7dfbb8a7ab6c6377040a20c851216572a79d0a0
Author: yanshiba <yanshiba@gmail.com>
Date: Mon Nov 9 15:08:05 2015 +0800
新建index.php

如果感觉log有点乱,可以git log –pretty=oneline,让日志单行显示.

1
2
3
37285a5a9bc5b62609c5e81dacc4daafab1b9600 new readme.txt
...
c7dfbb8a7ab6c6377040a20c851216572a79d0a0 新建index.php

切换版本

git reflog 查看版本变化

1
2
3
4
5
$ git reflog
5d5df85 HEAD@{0}: commit: four
6207e59 HEAD@{1}: commit: three
70110b9 HEAD@{2}: commit: two
bc65223 HEAD@{3}: commit (initial): one

HEAD指向当前版本5d5df86,
切换为head的前1版本,git reset –hard HEAD^
切换为head的前2版本,git reset –hard HEAD^^
切换为head的前100版本,git reset –hard HEAD~100

实例:

1
2
$ git reset --hard HEAD^^
HEAD is now at 70110b9 two

也可以利用版本号来切换,例

1
2
$ git reset --hard 6207e59
HEAD is now at 6207e59 three

分支管理

分支有什么用?

在开发中,遇到这样的情况怎么办?
网站已有支付宝在线支付功能,要添加”微信支付”.
修改了3个文件, wechat.php,pay.php

刚做到一半,突然有个紧急bug: 支付宝支付后不能修改订单状态.
你需要立即马上修改这个bug,需要修改的文件是,ali.php,pay.php.

问题是:pay.php,已经被你修改过,而且尚未完成.
直接在此基础上改,肯定有问题.
把pay.php倒回去? 那我之前的工作白费了.

此时你肯定会想: 在做”微信支付”时,能否把仓库复制一份,在此副本上修改,不影响原仓库的内容.修改完毕后,再把副本上的修改合并过去.
好的,这时你已经有了分支的思想.

前面见过的master,即是代码的主干分支,
事实上,在实际的开发中,往往不会直接修改和提交到master分支上.
而是创建一个dev分支,在dev分支上,修改测试,没问题了,再把dev分支合并到master上.

如果有了分支,刚才的难题就好解决了,如下图:
如图
在做”微信支付”时,我们创建一个wechat分支.
把wechat分支commit,此时,master分支内容不会变,因为分支不同.

当遇到紧急bug时,创建一个AliBug分支.
修复bug后,把AliBug分支合并到master分支上.

再次从容切换到wechat分支上,接着开发”微信支付”功能,开发完毕后,
把wechat分支合并到master分支上.

查看分支

查看所有分支git branch

1
2
git branch
* master # 说明只有master分支,且处于master分支.

创建分支

创建dev分支 git branch dev

1
2
3
4
git branch dev # 创建dev分支
git branch #查看分支
dev
* master # dev分支创建成功,但仍处于master分支

切换分支

切换到dev分支 git checkout dev
再次查看

1
2
3
$ git branch
* dev
master # 已切换到dev分支上

合并分支

当我们在dev上开发某功能,并测试通过后,可以把dev的内容合并到master分支.
例:
当前的readme.txt 内容为”so so”,在dev分支下,添加一行”from dev”
并提交

1
2
git add readme.txt
git commit -m "mod in dev"

再次切换到master,查看readme.txt的内容,仍为’so so’
合并dev分支,git merge dev, 如下:

1
2
3
4
5
$ git merge dev
Updating c5364fe..412926b
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)

再次查看readme.txt的内容,已变为”soso from dev”;

删除分支

1
2
git branch -d dev
Deleted branch dev (was 412926b).

快速创建和切换分支 快速创建和切换分支

git checkout -b dev # 创建dev分支并立即切换到dev分支
即起到git branch dev和git checkout dev的共同作用.

远程仓库

查看远程仓库

查看远程仓库:git remote
查看仓库地址:git remote -v
例:

1
2
3
git remote -v
origin https://git.oschina.net/lianshou/test.git (fetch)
origin https://git.oschina.net/lianshou/test.git (push)

删除远程库

命令:git remote remove <远程库名>
示例:git remote remove origin

添加远程库

命令:git remote add <远程库名> <远程库地址> 示例:

1
git remote add origin https://github.com/876205350/lianxi.git

注: 远程库名一般叫origin,但并非强制,你可以自己起名.
例:
git remote add online https://github.com/876205350/lianxi.git

修改远程库名称

git remote rename <旧名称> <新名称>
例:
git remote rename online oschina

公钥登陆

配置请看 ssh key配置

配置ssh格式的远程仓库地址

git remote add origin git@github.com:876205350/lianxi.git

push本地仓库到远程,发现不用填密码了

git push -u origin master

未完待续…………