git教程

(一)不同系统安装方式

1、Linux

输入 git 查看有没有安装
输入 sudo apt-get install git 完成Git的安装

2、Mac OS X

a:从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。(推荐)
b:一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。
在这里插入图片描述

3、Windows

从Git官网直接下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

(二)查看/修改用户名和邮箱地址

用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变。每次commit都会用用户名和邮箱纪录。

查看用户名、邮箱地址、密码:
git config user.name
git config user.email
修改用户名、邮箱地址、密码:
git config --global user.name "username"
git config --global user.email "email"
git config user.password "123456"

(三)创建版本库

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

git init 创建一个版本库

首先,选择一个合适的地方,创建一个空目录:

$ mkdir learning_git 
$ cd learning_git
$ pwd
$ git init
mkdir 命令用于创建文件
pwd 命令用于显示当前目录。

通过git init命令把这个目录变成Git可以管理的仓库
Git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD
在这里插入图片描述
瞬间Git就把仓库建好了,而且告诉你是一个空的仓库,
可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的
没事千万不要手动修改这个目录里面的文件。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

(四)查看,添加,提交文件夹

git status 命令可以让我们时刻掌握仓库当前的状态
git status
git add 把文件添加到仓库

可一次性添加所有文件(git add .),也可单独添加文件(git add filename),或者反复多次使用,添加多个文件

git add .
git add README.txt
git add file1.html file2.html
git commit 把文件提交到本地仓库
git commit -m '提交说明'

-m 后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
eg: 该目录添加一个READEME.txt文件,把它 添加到仓库
在这里插入图片描述

(五)时光穿梭

git status 命令可以让我们时刻掌握仓库当前的状态

我们试着修改README.txt文件内容,
接着git status 命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

git status
git diff 查看difference

显示的格式正是Unix通用的diff格式

git diff README.txt

在这里插入图片描述

git log 命令查看历史提交版本记录

显示从最近到最远的提交日志。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline 参数

git log
git log --pretty=oneline

一大串类似 026e9 …的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示
在这里插入图片描述

git GUI 可视化工具查看Git历史

每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线
在这里插入图片描述
git GUI 可视化教程

git reset 命令版本回退

首先,Git必须知道当前版本是哪个版本
HEAD 表示当前版本,也就是最新的提交。HEAD^ 表示上一个版本,HEAD^^ 表示上上一个版本。HEAD~100 表示往上100个版本
--hard 参数

回退方式有 HEAD方式, 也有 id 版本号回退方式,版本号可以写完整,也可以是前7位

git reset --hard HEAD^
git reset --hard feac7aaa698d8187afa2d077e7b24fc6c11dece2
git reset --hard feac7aa

在这里插入图片描述

git reflog 命令查看命令历史,记录你的操作命令

以上回退版本之后,又想回到之前的本版,我们需要lit log 再查找 id。
当然最简便的方法就是用git reflog 命令查看更改记录,里面有记录之前切换的版本

git reflog

在这里插入图片描述

工作区(Workspace),暂存区(Index / Stage),版本库/本地仓库(Repository)

当前的电脑能看到的目录,比如我的 learning_git 文件夹就是一个工作区

工作区的目录.git,就是Git的版本库。

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

每次修改,如果不用git add到暂存区,那就不会加入到commit中。
在这里插入图片描述

git checkout -- file 撤销丢弃工作区的修改

当我们需要丢弃工作区某个文件的修改,在还没有 commit 之前,就可以用这种方式

git checkout -- file
-- 必须存在,否则会被理解为切换分支

在这里插入图片描述

git reset HEAD^ <file> 撤销暂存区的修改,重新放回工作区

commit 之后,想撤销 commit 修改
可以单独撤销某个文件的修改,或者撤销整个commit
完成撤销操作后,就恢复到了上一次的commit状态。

git reset HEAD^ <file>
git reset --soft HEAD^

--mixed 保留工作空间改动代码,撤销commit,撤销git add . 操作
git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

--soft 不删除工作空间改动代码,撤销commit,不撤销git add .

--hard 毫无保留,删除工作空间改动代码,撤销commit,撤销git add .
在这里插入图片描述

rm file 删除文件

你可以选择直接在文件管理器中把没用的文件删了,或者用rm命令删了

如果删错了,因为版本库里还有,所以可以很轻松地把误删的文件恢复到最新版本

rm test.txt

git checkout -- test.txt
合并特定commits 到另一个分支

1、合并某个分支上的单个commit(cherry-pick

feature 分支上的commit 62ecb3 非常重要,你现在只需要将62ecb3 合并到develop,而不合并feature上的其他commits
git log
dd2e86 - 76cada -  62ecb3 - 5a6057 [feature]

git checkout develop
git cherry-pick 62ecb3

2、合并某个分支上的一系列commits(rebase

假设你需要合并 feature 分支的 commit 76cada ~ 62ecb3 到 develop 分支
git checkout -b rebase 62ecb3  // 建一个rebase新分支只取到 62ecb3 
git rebase --onto develop 76cada^ // 新分支--onto 76cada^ 指明你想从哪个特定的commit开始

(六)远程仓库(Remote)

Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。就是每个开发人员可以从中心版本库的服务器上chect out代码到本地机器上克隆一个自己的版本库。在离线等情况下,你仍然能够在你本地提交文件,查看历史版本记录,创建项目分支等。

其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下。不过,这并没有什么意义。

实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
好在这个世界上有个叫GitHub的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库:https://github.com/

SSH Key

注册GitHub账号后。由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
1、创建SSH Key

ssh-keygen -t rsa -C "youremail@example.com"

在这里插入图片描述

把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

2、GitHub中,Add New SSH Keys:
在这里插入图片描述
点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
在这里插入图片描述
在这里插入图片描述
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

远程先创建仓库,克隆到本地

a: New --> creat repository 新建一个项目

Repository name: 仓库名称(输入名字,最好不要使用中文)
Description(可选): 仓库描述介绍
Public, Private : 仓库权限(公开共享,私有或指定合作者)
Initialize this repository with a README: 添加一个README.md
gitignore: 不需要进行版本管理的仓库类型,对应生成文件.gitignore
license: 证书类型,对应生成文件LICENSE
在这里插入图片描述

在这里插入图片描述
b: git clone 把项目克隆到本地
在这里插入图片描述

本地先创建仓库,提交到远程

创建关联远程分支

git checkout -b my-test  //在当前分支下创建my-test的本地分支分支,并切换到新分支(-b)
git push origin my-test  //将my-test分支推送到远程
git branch --set-upstream-to=origin/my-test //将本地分支my-test关联到远程分支my-test上   
git branch -a //查看远程分支 

本地\远程仓库版本回退

git log //查看历史提交记录,选择要回退的版本号,commit后面一串字符
git reset --hard 8622e0f10...... // 回退本地版本 (本地版本)
git push -f //强制回退远程仓库到当前版本 (远程仓库)

移除本地分支

需要切换到其它分支之后删除当前分支

git branch -d <BranchName>

 强制删除 :
 git branch -D <BranchName>
 
删除远程分支:
git push origin  :XXXX

命令行的各种退出方式

git log

如果commit(提交)比较多,git log 的内容就会比较多;当满屏放不下,就会显示冒号。

查看更多:回车(往下滚一行)、空格(往下滚一页

退出:英文状态下 按 q

git commit 、git merge

该命令没有带-m参数时,会跳出commit change log
(COMMIT_EDITMSG)界面,因为涉及到是否要保存编辑内容,所以退出命令有多种。

保存并退出:
(1)按 Esc 键退出编辑模式,英文模式下输入 :wq ,然后回车(write and quit)。
(2)按 Esc 键退出编辑模式,大写英文模式下输入 ZZ ,然后回车。

不保存退出:
Esc 键退出编辑模式,英文模式下输入 :q! ,然后回车。
Esc 键退出编辑模式,英文模式下输入 :qa! ,然后回车。

学习地址
https://www.cnblogs.com/ximiaomiao/p/7140456.html

更新远程分支列表

有时会遇到git branch -a时总是不出现新的分支或者远程已经没有的分支在本地还有,这时就需要更新下本地的git分支保持和远程分支一致,使用下面命令即可:

git remote update origin --prune

(六)说说常见的版本控制管理工具,以及它们的区别

项目源代码的版本管理工具中,比较常用的主要有:Git、CVS、SVN 、VSS、ClearCase、Mercurial 、StarTeam、BitKeeper

GIT:
最初是从Linux起家的,非常依赖文件系统的一些特性。
Git 是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

CVS:
一个开源工具,与后面提到的SVN是同一个厂家:Collab.Net提供的。
CVS是源于unix的版本控制工具,对于CVS的安装和使用最好对unix的系统有所了解能更容易学习,CVS的服务器管理需要进行各种命令行操作。目前,CVS的客户端有winCVS的图形化界面,服务器端也有CVSNT的版本,易用性正在提高。

SVN:
在CVS 的基础上,由CollabNet提供开发的,也是开源工具,目前越来越受到大家的欢迎,估计将来可能会成为最著名,使用最广泛的工具。
在权限管理,分支合并等方面做的很出色,他可以与Apache集成在一起进行用户认证。不过在权限管理方面目前还没有个很好用的界面化工具。
是一个跨平台的软件,支持大多数常见的操作系统。

VSS:
Microsoft提供的,可以与VS.net进行无缝集成,成为了独立开发人员和小型开发团队所适合的工具,当规模较大后,其性能通常是无法忍受的,对分支与并行开发支持的比较有限。

Git与CVS 的区别 :
分支更快、更容易。
支持离线工作;本地提交可以稍后提交到服务器上。
Git 提交都是原子的,且是整个项目范围的,而不像 CVS 中一样是对每个文件的。
Git 中的每个工作树都包含一个具有完整项目历史的仓库。
没有哪一个 Git 仓库会天生比其他仓库更重要。

Git与SVN 的区别:
1、Git是分布式的,SVN不是。这个是最主要的区别
所谓分布式。就是每个开发人员可以从中心版本库的服务器上chect out代码到本地机器上克隆一个自己的版本库。在离线等情况下,你仍然能够在你本地提交文件,查看历史版本记录,创建项目分支等。
需要做一点声明,Git并不是目前第一个或唯一的分布式版本控制系统。还有一些系统如 Bitkeeper, Mercurial 等也是运行在分布式模式上的,但Git在这方面做的更好,而且有更多强大的功能特征。
2、Git 把内容按元数据方式存储,而SVN是按文件
.git 目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签、分支、版本记录等。
3、Git 分支和SVN的分支不同
Git 的分支,你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。
4、Git 没有一个全局的版本号,而SVN有
5、Git 的内容完整性要优于SVN

在这里插入图片描述

Git教程:https://www.liaoxuefeng.com/wiki/896043488029600

github用户名密码之谜

git操作及fatal: Authentication failed for错误解决

git设置用户名密码(单用户和多用户)

Git 的使用——提交避免输入用户名和密码

git使用 — push代码到github和常用的git指令

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值