Git快速精通

下载

官网

Git简史

同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。

Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。

到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统(参见 Git 分支)。

Git诞生的小故事

Linus Benedict Torvalds 大神带着一堆分布在世界各地的优秀程序员开发Linux Kernel,因为当时没有什么版本控制工具,都是Linus本人合并分散在世界各地人员提交过来的代码,到了2002年出现了商业软件:BitKeeper,BitKeeperd的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统,但要求不能破解。2005年大佬们用着别人不开源的手痒痒,开发Samba的Andrew开始试图破解BitKeeper的协议,被BitMover公司发现,公司要收回Linux社团的免费使用权。当时Linux是社团,无法像商业公司那样对参与开发着进行强有力的约束。Linus本人心想人家不给我用,我就自己开发,Linus就自己用C语言开发了一个分布式版本控制语言Git,主体程序开发完成只用了两周,一个月后Linux系统代码就由Git管理,到了2008年 GitHub上线 普遍jQuery、Ruby、PHP……都开始它开托管项目。

git基本命令

本地库初始化

git init

  • 初始化一个git本地库

状态查看

git status

  • 查看工作区,暂存区的状态

添加

git add [file name]

  • 将工作区的“新建/修改”添加到暂存区

从暂存区撤销添加的文件

git rm --cached [file name]

提交

git commit -m "commit message" [file name]

  • 将暂存区的内容提交到本地库

查看历史记录

git log

  1. 如果提交次数比较多一次显示不下

    • 空格 向下翻页

    • b 向上翻页

    • q 退出

  2. 使用漂亮的格式来显示 ,一条日志只显示一行

git log --pretty=oneline

或者

git log --oneline

  • 哈希值只显示一部分

或者

git reflog

  • 显示指针需要移动不步数

  • HEAD@{移动到当前版本需要多少步}

版本的前进后退

基于索引值操作[推荐]

  1. 首先我们通过git reflog查看需要后退的索引值
  2. 通过 git reset --hard [局部索引值]

案例:git reset --hard a6ace91

使用^符号只能后退

git reset --hard HEAD^

  • 一个^表示后退一步,n个表示后退n步

git reset --hard HEAD

查看当前指针指向哪一个版本

使用~符号只能后退

git reset --hard HEAD~n

  • 注:表示后退n步

案例:git reset --hard HEAD~5 后退五步

reset命令的三个参数对比

  1. soft参数

    • 仅仅在本地库移动HEAD指针
  2. mixed参数

    • 在本地库移动HEAD指针
    • 重置暂存区
  3. hard参数

    • 在本地库移动HEAD指针
    • 重置暂存区
    • 重置工作区

删除文件并找回

  1. 前提:删除前,文件存在时的状态提交到了本地库。

  2. 操作:git reset --hard [指针位置]

    • 删除操作已经提交到本地库:指针位置指向历史记录

    • 删除操作尚未提交到本地库:指针位置使用HEAD

      git reset --hard HEAD

比较文件差异

git diff [文件名]

  • 将工作区中的文件和暂存区进行比较

git diff [本地库中历史版本] [文件名]

  • 将工作区中的文件和本地库历史记录比较
  • 不带文件名比较多个文件

分支管理

创建分支

git branch[分支名]

查看分支

git branch -v

切换分支

git checkout[分支名]

合并分支

  1. 切换到接受修改的分支(别合并,增加新内容) 上 git checkout [被合并分支名]
  2. 执行 merge 命令git merge [有新内容分支名]

解决冲突

  1. 编辑文件,删除特殊符号

  2. 把文件修改到满意的程度,保存退出

  3. git add [文件名]

  4. git commit -m “日志信息”

    注意:此时commit一定不能带具体文件名

GitHub

创建远程库地址别名

为了每次推送都要复制地址很麻烦

git remote -v

  • 查看当前所有原创地址别名

git remote add [别名] [远程地址]

  • 创建别名

推送

git push [别名] [分支名]

  • 必须要指定分支名默认分支 master

克隆

git clone [远程地址]

  • 效果
    • 完整的把远程库下载到本地
    • 创建远程地址别名
    • 初始化本地库

团队成员邀请

在这里插入图片描述

“一号”其他方式把邀请链接发送给“二号”,“二号”登录自己的 GitHub 账号,访问邀请链接。

拉取

  1. pull=fetch+merge
    • pull操作相当于fetch 和 merge
  2. git fetch [远程库地址别名] [远程分支名]
  • 远程库内容下载到本地,但是并没有改动本地文件
  • 如果想查看下载内容
    • git checkout [远程库地址别名/远程分支名] 先切换分支
    • 在用 cat 文件名。查看文件内容
  1. git merge [远程库地址别名/远程分支名]
  • 本地文件改变
  1. git pull [远程库地址别名] [远程分支名]
  • 把2 3两步合并一步走

解决冲突

  1. 如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取
  2. 拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。
  3. 再次推送

注意再次提交到本地库是不能带文件名的

跨团队协作

  1. Fork

    点击别人项目的fork,在自己仓库中建立分支

  2. 看看自己的库

  1. 这个时候就可以把自己的库中的内容克隆到自己本地,开发自己的东西
  2. 推送到远程仓库
  3. pull request操作

  1. 来到主号

  1. 审核代码

  1. 合并代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6zvwMcMY-1585999915891)(/Users/alone/Library/Application Support/typora-user-images/image-20200404155520991.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WPjbk0r7-1585999915893)(/Users/alone/Library/Application Support/typora-user-images/image-20200404155740163.png)]

  1. 这就合并完成了,可以在线查看,也可以拉取到本地查看

SSH登陆

  1. 进入当前用户的家目录(也就是更目录 Windows 是user目录 而mac 是用户下面的系统名的文件夹)

cd ~

  1. 删除.ssh目录

rm -rvf .ssh

  1. 运行命令生成.ssh密钥目录

ssh-keygen -t rsa -C chnllcong@gmail.com 登陆github的邮箱

[注意:这里**-C** 这个参数是大写的 C]

  1. 进入.ssh目录查看文件列表

cd .ssh/

ls -lF

  1. 会生成 id_rsa 文件和 id_rsa.pub 文件内容

  2. id_rsa.pub当中有一段密钥

  3. 到github的设置中

  1. 客户端进行测试
    • 复制ssh克隆地址
    • 按照正常推送就可以了
      *

git 工作流

在这里插入图片描述

Gitlab服务器搭建过程

gitlab首页

用虚拟机安装CentOS(CentOS是基于Linux内核的100%免费的操作系统)

安装命令摘录

sudo yum install -y curl policycoreutils-python openssh-server cronie sudo lokkit -s http -s ssh
sudo yum install postfix
sudo service postfix start
sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ee

实际问题:yum 安装 gitlab-ee(或 ce)时,需要联网下载几百 M 的安装文件,非常耗 时,所以应提前把所需 RPM 包下载并安装好。

下载地址

https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

调整过后的安装

sudo rpm -ivh /opt/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm
sudo yum install -y curl policycoreutils-python openssh-server cronie sudo lokkit -s http -s ssh
sudo yum install postfix
sudo service postfix start
sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce

gitlab 服务操作

  1. 初始化配置gitlab
    • gitlab-ctl reconfigure
  2. 启动gitlab服务
  • gitlab-ctl start
  1. 停止gitlab服务
  • gitlab-ctl stop

查看帮助文档

git help reset


设置提交到远程服务器上后显示的名字

项目级别/仓库级别(提交到远程服务器上后显示的名字)

git config user.name llc

git config user.email chnllcong@gmail.com

信息保存的位置

./.git/config

查看文件的内容

cat .git/config

系统用户级别:登录当前操作系统的用户范围

git config --global user.name llc_pro

git config --global user.email chnllcong@gmail.com

信息保存位置:~/.gitconfig 文件


VIM命令

$ ll – 打印当前目录

$ ls -la – 打印当前目录带隐藏资源

$ cd 文件名/ – 进入某个目录

$ mkdir [name] – 创建文件夹

$ pwd – 答应当前项目目录

$ vim [file name]创建文件/查看文件

$ rm [file name]删除文件

$ :wq --编辑保存 :wq!强制保存

$cat [file name] – 查看文件内容

$tail -n 行数 [file name] – 查看文件内容最后多少行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值