Git版本控制

Git 版本控制

1.Git 的安装 和 基本配置

1.1 安装

Linux 安装

二进制包(在线)
yum -y install git    //RedHat系列
apt-get git install     //Debian系列
源码包(官网下载)

Windows 安装

Git在Windows使用模拟环境msysgit
下载地址:
[https://git-for-windows.github.io/](https://git-for-windows.github.io/)
注意:如果想让windows作为git服务器则需要搭建ssh服务。

1.2 配置

无论 Linux 还是 Windows,安装完成后都要初始化

1
2
3
4
5
6
7
8
git config [--global] user.name "Your Name"
git config [--global] user.email "your@email.com"

中括号内的参数:
--local 本地
--system 系统
--global 全局
无参,则为当前库配置身份

2. Git 常用操作

2.1. 生成新的版本库

  1. 新建空目录
  2. 进入该目录—单击右键—选择 Git Bash Here
  3. 弹出 git 的命令行工具
  4. 初始化该目录为版本仓库,键入 git init
  5. 显示 Initialized empty Git repository in xxxxxx
  6. ls -a 查看该目录下出现.git 的隐藏目录,即版本库
  7. 初始化完成

2.2.添加文件到版本库

  1. 新建文件 1.txt

  2. 查看当前版本状态

    git status     #查看当前版本状态
    
  3. 红字提示有文件未跟踪(未加入版本控制)

  4. 在工具内输入以下,添加文件至版本库:

    git add 1.txt
    # 添加文件至缓存区
    git commit -m "描述"
    # 提交文件至版本库
    
    git add newfile1 newfile2 ...
    # 多文件添加
    git commit -m "描述"
    # 将缓存区的多次添加一次提交
    
    ps:
    git add .
    # 添加所有改动过的文件到缓存区
    git add --all
    # 添加所有文件到缓存区
    

5) 执行完后,提示提交完成.

6) git status 提示
nothing to commit, working directory clean

7) 至此最简单的添加文件到版本库已完成


2.3.查看文件修改状态相关

1
2
git status
# 查看当前版本状态(是否修改)

修改文件测试以下 :

1
2
3
git diff            # 工作区 与 缓存区的区别
git diff --cached # 缓存区 与 版本库的区别
git diff HEAD # 工作区 与 版本库的区别

Git 日志,分析日志构成 :

1
2
3
4
git log
# 查看提交历史
git log --oneline
# 以简短的方式查看提交日志

2.4. 版本回退

1
2
3
4
5
6
7
8
9
git reset --hard HEAD
# 将当前版本重置为HEAD(通常用于清空缓存区,或merge失败回退)

git reset --hard HEAD^ # 回退上一个版本
git reset --hard HEAD^^ # 回退上两个版本
git reset --hard HEAD~n # 回退上n个版本

git reset --hard <commitid>
# 回退到指定版本,commitid根据log获取

2.5. 行为日志

1
2
3
4
git reflog
# 行为日志,显示所有提交,回滚等..
git ls-files
# 显示缓存区的所有文件

2.6. 撤销

目的:将尚未提交至版本库的修改撤回。

  • 情况一 : 文件修改后尚未添加至缓存区
1
2
git checkout --filename
# 在工作区撤销文件的修改
  • 情况二 : 文件修改已添加至缓存区
1
2
git checkout HEAD [filename]
# 撤回添加至缓存区的修改,不指定filename则撤回所有

2.7. 删除

1
2
3
4
5
6
git rm index.php
# 删除index.php文件
git rm --cached index.php
# 将index.php文件移出缓存区,但不删除( -r * 递归目录)
git rm -f 1.html
# 将缓存区中的1.html文件移出并删除

3. Git 多人协作

3.1. 得到远程的版本库

可以使用两种方式来得到远程版本库:

  • 在某个指定的文件夹下使用,即可得到远端版本库及代码
1
git clone <远端版本库url> <本地存放该库的文件夹名>
  • 手动添加版本库,并拉取文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
git init
#初始化本地仓库

git remote add <remote> <url>
# 添加远程版本库 <remote>可自行取名,默认origin

git remote -v
# 查看远程版本库信息
git remote show <remote>
# 查看指定远程版本库信息

git remote remove <remote>
# 删除远程remote链接

git pull <remote> <branch>
# 下载代码及快速合并

3.2. 推送分支代码

得到远端版本库后,可以在本地按正常的步骤编辑 :
新建或改动文件–>添加至缓存区–>提交到版本库

此时,要想将本地版本库发给远端,只有 commit 提交是不够的.
还需要下面的操作 :

1
2
git push <remote> <branch>
# 上传代码及快速合并

执行以上代码,会有报错 : 无法直接推送到远端的主分支

此时,可以曲线救国,推送自己的分支到远端即可 :

1
git push origin master:dev

此时,推送成功!


4.Git 分支管理

4.1. 查看版本库分支

1
2
3
4
5
6
git branch
# 显示本地分支
git branch -a
# 显示所有分支
git checkout 分支名/标签名
# 切换到指定分支或标签

4.2. 创建分支/删除分支

1
2
3
4
5
6
7
git branch 分支名
# 新建分支
git checkout -b dev
# 创建并切换到dev分支

git branch -d 分支名
# 删除本地分支 -D 强制删除

4.3. 合并分支

要将 B 分支合并到 A 分支里
请切换到 A 分支内,合并 B 分支的操作在 A 分支内进行

1
2
git merge 分支名
# 合并分支到当前分支

4.4. 解决合并冲突

多分支修改同一文件,合并可能出现冲突。冲突部分用<<<===>>>表示

解决方法:
先手动修改冲突部分,再次提交即可。


5. 使用代码托管系统

市面上有名的 Git 托管系统 :

5.1. 开源中国 生成 SSH 密钥

1). 本地打开 git bash ,cd切换到用户的家目录
2). 使用pwd来查看目录是否正确
3). 使用 ssh-keygen -t rsa 来生成 SHA256 的 SSH 密钥(按回车确认即可)
4). cd .ssh/ 切换至 ssh 目录
5). ls 查看目录下文件
6). cat id_rsa.pub 查看生成的密钥,并复制
7). 打开 git@osc 开源中国,登录自己的账户.点选个人资料
8). 选择 SSH 公钥
9). 在添加公钥界面,将刚刚复制好的密钥粘贴进来,再自己取一个该密钥的名字,以便于区分管理
10). 本地新建一个目录,用于拉取远端版本库
11). 使用 git init初始化该目录
12). 使用git remote add origin <SSH地址> 来添加远程版本库
13). 使用git remote -v 来查看远程版本库信息
14). 使用git pull origin marster来拉取版本库及代码

5.2. github 添加 SSH key

1). 运行 git Bash 客户端,输入如下代码:
$ cd ~/.ssh
$ ls
这两个命令就是检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,那么你可以跳过步骤 2,直接进入步骤 3

2). 创建一个 SSH key
$ ssh-keygen -t rsa -C "your_email@example.com"
代码参数含义:
-t 指定密钥类型,默认是 rsa ,可以省略。
-C 设置注释文字,比如邮箱。
-f 指定密钥文件存储文件名。

3). 添加你的 SSH key 到 github 上面去
$ cat ~/.ssh/id_rsa.pub

4). 测试一下该 SSH key 在 git Bash 中输入以下代码
$ ssh -T git@github.com
显示类似如下,表示成功:
Hi username! You've successfully authenticated

5). git clone 远程git仓库地址


6. 文件忽略

工作区某些文件不控制版本,可使用.gitignore 文件进行忽略.
!(注意, .gitignore 文件 是没有名字的文件.)
规则:
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效.

LeoQin wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
0%