Git学习

一、什么是GitHub?

GitHub是一家公司,由 Chris Wanstrath, PJ Hyett 与 Tom Preston Werner 三位开发者在2008年4月创办;

2008年4月10日,GitHub正式成立,地址:How people build software · GitHub ,主要提供基于git的版本托管服务。截止目前,GitHub 已经发展成全球最大的开源社区。

二、GitHub与Git的关系

Git 是一款免费、开源的分布式版本控制系统,由Linux 发明者 Linus Torvalds 开发;

GitHub 是提供基于 Git 的版本托管服务,就是说GitHub 上托管的所有项目代码都是基于 Git 来进行版本控制的,So,Git 只是 GitHub 上用来管理项目的一个工具,而GitHub 的功能远不止此。

三、加入Github

1、去 GitHub 官网「How people build software · GitHub」注册「Sign Up」个账号;

2、创建自己的项目(点击顶部导航栏的 + 可以快速创建一个项目);

四、GIT的基础操作

安装:

  Mac:https://sourceforge.net/projects/git-osx-installer/(一般Mac会自带Git)

  Windows:https://git-for-windows.github.io/

  Linux:apt-get install git

基本命令:

注:本文所有的命令都是在Linux上操作的

命令行输入git,出现以下提示,Git安装成功:

我们现在在root目录下新建一个test,然后进入到test目录下:

mkdir test    # 创建test文件夹
cd test       # 切换到test目录
touch a.txt   # 新建a.txt文件

如图

 当前目录还不是一个 Git 仓库,

git init   # 初始化git仓库

Untracked files ,就是说 a.txt 这个文件还没有被跟踪,还没有提交在 git 仓库,提示你可以使用 git add 去操作你想要提交的文件

git status  # 查看状态
git add     # 添加到仓库缓存中
git commit -m 'first commit'     # 正式进行了第一次提交
git log    # 查看所有产生的 commit 记录
git add & git commit    # 提交的合并操作
git branch  a   #创建a分支
git checkout a    # 切换到a分支上
git checkout -b a    #合并 与 切换 同时操作 
git merge a     # 合并a分支
git branch -d  a     # 删除分支
git branch -D  a     # 强制删除a分支
git tag v1.0          # 创建标签
git checkout v1.0 #
切换标签

向GitHub提交代码

1、SSH

SSH是一种网络协议,用于计算机之间的加密登录。大多数 Git 服务器都会选择使用 SSH 公钥来进行授权,想要在 GitHub 提交代码的第一步就是要先添加 SSH key 配置;

2、生成SSH key

Linux和Mac都默认安装了SSH,命令行输入ssh查看

 ssh-keygen -t rsa   #指定 rsa 算法生成密钥

输入 ssh-keygen -t rsa,指定 rsa 算法生成密钥,接着连续三个回车键(不需要输入密码),然后就会生成两个文件 id_rsa 和 id_rsa.pub , id_rsa 是密钥,id_rsa.pub 就是公钥

Linux/Mac 系统 在 ~/.ssh 下,win系统在 C/Documents and Settings/username/.ssh 下,都是隐藏文件

git push origin master     # 把本地代码推到远程master分支
git pull origin master       # 把远程最新代码更新到本地

# 一般在 push 之前先 pull ,这样不容易冲突。
git clone git@github.com:/Clint-cc/test.git    #将test项目clone到本地

五、GIT的进阶操作

设置用户名和邮箱

我们每一次commit都会产生一条log,这条log标记了提交人的姓名与邮箱,以便其他人方便的查看与联系提交人,所以在进行提交代码的第一步就是要设置自己的用户名与邮箱

git config —global user.name "clint-cc"
git config —global user.email "clint1801@163.com"

以上进行了全局配置,有时候我们的某一个项目想要用特定的邮箱,这个时候只需切换到你的项目, --global 参数去除,重新执行一遍

alias

 有些频繁的操作,我们可以给命令起个简短的别名,下次用别名执行

git config global alias.co checkout # 给命令起别名

PS: 比较清晰,分支走向明显的命令

git log --graph --pretty=format:'%Cred%h%Creset -
%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

但是每次如果要输如这么一大串那就不方便了,这时我们就可以用alias命令简化

git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"

以后直接输入git lg就行了

其他配置 

git config --global core.editor "vim"     # 设置Editor使用vim
git config --global color.ui true         # 开启给 Git 着色
git config --global core.quotepath false  # 设置显示中文文件名

diff

git diff                         # 比较当前文件和暂存区文件差异,
git diff <$id1> <$id2>           # 比较两次提交之间的差异
git diff <branch1>..<branch2>    # 在两个分支之间比较
git diff staged                  # 比较暂存区和版本库差异

checkout

切换

git checkout develop     #切换到 develop 分支
git checkout v1.0          #切换v1.0标签

撤销

git checkout a.txt    #把原文件还原(之前的操作撤销)

PS:checkout 命令只能撤销还没有 add 进暂存区的文件

stash

git stash         # 把当前分支所有没有 commit 的代码先暂存起来
git stash apply # 代码还原
git stash drop # 把最近一条的 stash 记录删除
git stash pop #
来代替apply 命令,pop 跟 apply 的唯一区别就是 pop 不但把代码还原,还自动把这条 stash 记录删除,省去drop一次

 merge & rebase

# 将a分支合并到master上
# 使用merger
git checkout master
git merge a

# 使用rebase
git checkout master
git rebase a


# rebase 跟 merge 的区别你们可以理解成有两个书架,你需要把两个书架的书整理到一起去,第一种做法是 merge ,比较粗鲁暴力,就直接腾出一块地方把另一个书架的书全部放进去,虽然暴力,但是这种做法你可以知道哪些书是来自另一个书架的;第二种做法就是rebase ,他会把两个书架的书先进行比较,按照购书的时间来给他重新排序,然后重新放置好,这样做的好处就是合并之后的书架看起来很有逻辑,但是你很难清晰的知道哪些书来自哪个书架的。

团队合作利器:Git 分支管理

Git Flow 是一种比较成熟的分支管理流程

原文地址:https://www.cnblogs.com/Utopia-Clint/p/10896006.html