目录
前言:
发展过程:
集中式与分布式的区别:
Git优点:
核心命令:
配置Git:
配置Git环境:
创建本地空仓库:
查看仓库状态:
新建文件添加到本地仓库 :
将所有改动文件添加到缓存区:
查看单个文件可回滚版本:
查看最近的两条信息:
在一行上展示最近两条提交历史信息:
在一行上展示最近两条提交历史信息,并自定义输出格式:
回退到指定版本:
查看提交历史:
删除文件:
GitHub的使用:
GitHub开源相关概念:
开源的优点:
开源项目托管平台:
访问GitHub方式:
将远程仓库克隆到本地:
分支操作:
主分支:
功能分支:
查看分支:
创建新分支:
切换分支:
分支的快速创建和切换:
合并分支:
删除本地分支:
遇到冲突时的分支:
将本地分支关联到远程仓库:
跟踪分支:
拉取远程分支最新的代码:
删除远程分支:
Git 命令总结:
免费的在线资源
相关的Git问题总汇可查看:
error: src refspec main does not match any
Please make sure you have the correct access rights and the repository exists.
Git最初是由Linux开发者Linus用了仅仅两周时间纯C语言编写而成,在编写完成之后就立马上手接管Linux源代码,不过在此之前Linux是由BitMover公司开发的BitKeeper分布式版本控制系统所管理源代码,它是商业收费的分布式版本控制器,但BitMover公司看中Linux开源精神,免费授权给Linux社区使用,在2002年时,Linux开始使用BitKeeper分布式版本控制系统管理源代码,但好景不长,有一天Linux社区成员Andrew(samba(局域网共享文件c/s程序)的作者)试图破解BitKeeper共享给所有人使用,被BitMover公司发现并收回了免费使用的版权,随后Linus就用了两周时间开发出了git(两周时间包括测试),也就是目前为止最好用的分布式版本控制系统。
大名鼎鼎的github用的就是git系统来管理它们的网站,这里需要区分一下,github和git是两个东西,github是一个社区,git是一个服务系统,github只支持git分布式系统,所以故名成为github。
除了git还有svn、cvs这样的版本控制系统,它们的区别在于一个是分布式一个是集中式
集中式就是svn和csv这样的版本控制系统,分布式是git
区别在于集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来,并且如果服务器丢失了,那么所有的就都丢失了,你本机客户端仅保存当前的版本信息,换句话说,集中式就是把代码放在一个服务器上集中管理,你的所有回滚等操作都需要服务器的支持。
分布式的区别在于,每个人的电脑都是服务器,当你从主仓库拉取一份代码下来后,你的电脑就是服务器,无需担心主仓库被删或者找不到的情况,你可以自由在本地回滚,提交,当你想把自己的代码提交到主仓库时,只需要合并推送到主仓库就可以了,同时你可以把自己的代码新建一份仓库分享给其它人。
像集中式它们都有一个主版本号,所有的版本迭代都以这个版本号为主,而分布式因为每个客户端都是服务器,git没有固定的版本号,但是有一个由哈希算法算出的id,用来回滚用的,同时也有一个master仓库,这个仓库是一切分支仓库的主仓库,我们可以推送提交到master并合并到主仓库上,主仓库的版本号会迭代一次,我们客户端上的git版本号无论迭代多少次,都跟master无关,只有合并时,master才会迭代一次。
分布式版本控制系统:服务器保存文件的所有更新版本,客户端是服务器的完整备份。
联网运行,支持多人协作开发,客户端断网后支持离线本地版本更新,服务器故障后,可以使用任何一个客户端的备份进行恢复
git是一个开源的分布式版本控制系统。
特性:直接记录快照,而非差异比较,近乎所有操作都是本地执行。
git快照是在原有文件版本基础上重新生成一份新的文件,类似于备份。如果文件没有修改,git不在重新存储文件,而是只保留一个链接指向之前存储的文件。空间换时间
git大多数操作只需访问本地文件和资源,一般不需要来自网络上其他计算机的信息。
git管理项目拥有三个区域分别是:工作区,暂存区,Git仓库。
git的三种状态:已修改,已暂存,已提交。
百度搜索:Git (git-scm.com https://git-scm.com/
下载完成后一直点击next按键安装后,在所需操作文件下右键鼠标显示:
参数讲解:
config:参数是用来配置git环境的
--global:长命令表示配置整个git环境
初次使用git需要设置你的用户名以及邮箱,这将作为当前机器git的标识,如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码
用户名配置:
user代表用户,.name代表配置用户的名称
git config --global user.name "你的用户名"
邮箱配置:
user代表用户,.email代表配置用户的邮箱
git config --global user.email "你的邮箱"
使用git init 命令
将尚未进行版本控制的本地目录转换为Git仓库。
使用git status 命令
使用git status也可以查看当前文件的状态
英文对应:
A:未修改
AM:修改
Untracked:未提交
modified:新文件,但未提交
如果提交了的文件,且没有改动的,不会显示到这个里面
注:git status -s或--short 可以以精简的方式查看文件处于什么状态
使用git add,git commit -m命令
git add命令开始跟踪一个文件并放在暂存区,可以把已跟踪的,且已修改的文件放到暂存区,把有冲突的文件标记为已解决状态。
git commit -m进行提交后面添加-m用来对提交的内容进一步的描述将暂存区的内容转换为git 仓库中
总结步骤:
使用git add --all ,git add . 命令
注:这个命令会将当前目录下包括子目录下所有改动的文件提交到暂存区,注意只包括改动的文件,不改动的不会放到缓存区。
这个命令还会把删除的文件也提交进去
使用 git log 文件名 命令
会按时间先后列出所有的提交历史
git log -2 命令
git log -2 --pretty=oneline 命令
git log -2 --pretty=format :"%h | %an |%ar | %s" 命令按照时间的格式输出显示
git reset --hard
使用git reflog 命令
git reflog可以查看当前版本库的提交历史,凡是对仓库版本进行迭代的都会出现在这个里面,包括你回滚版本都会出现在这个历史中
使用git rm 命令
使用git rm删除文件,但是也需要使用git commit提交一次
注:如果我们使用普通的命令,rm删除文件,git状态会提示你删除了文件,你只需要使用add重新提交一次就可以了。
开源许可协议:
注:GPL具有传染性的一种开源协议:不允许修改后和衍生的代码作为闭源的商业软件发布和销售 项目有:Linux 。
MIT是限制最少的协议,唯一条件是修改后代码或者发行包中,必须包含原作者的许可信息
项目有:jQuery和node.js 。
GitHub,Gitlab,Gitee。只能托管Git管理的项目源代码
github是一款使用git命令作为基础框架的网站,它是一款开源分享网站,你开源把你的源代码放到github上,然后让人来start给你小星星,小星星越多代表你的项目越具有影响力,很多公司面试如果你有一个很多星星的项目,会大大提升你的录取率。
你也可以把你的一些项目分享到github上保存,github上是无限制代码的。
HTTPS和SSH
基于HTTPS将本地仓库上传到GitHub:
SSH作用:实现本地仓库和GitHub之间的免登录的加密数据传输
配置SSH key :
检测GitHub的SSH是否配置成功:
基于SSH 将本地的仓库上传到GitHub上:
使用 git clone 命令
打开git bash输入git clone 远程地址 命令
使用 git branch 命令
如果要查看当前所有分支可以使用:git branch -a
HEAD指向当前分支 分支名字前面的*号表示当前所处的分支
使用 git branch 新分支名 命令
使用 git checkout 分支名 命令
使用git checkout -b 命令
注:-b 表示创建一个新分支
使用git merge 命令
注:当我们新建分支并做完工作之后,想要把分支提交至master,只需要切换到master仓库,并执行git merge 分支名就可以了。需要注意的是先要切换到主分支上执行命令
使用git branch -d 分支名 命令
注:需要注意的是要先切换到主分支再执行命令
注:需要手动打开文件进行更改。
需要先进行关联本地仓库和远程仓库:
我们本地有一个仓库,我们想把它推送到远程上去,很简单,我们只需要使用git remote add origin命令就可以了,ongin是github上的仓库名称,意思是远程仓库的意思。
首先选择仓库的code找到github生成的远程仓库链接
使用git push -u 远程仓库别名 本地分支
push:将本地仓库与远程仓库合并
-u:将本地仓库分支与远程仓库分支一起合并,就是说将master的分支也提交上去,这样你就可以在远程仓库上看到你在本地仓库的master中创建了多少分支,不加这个参数只将当前的master与远程的合并,没有分支的历史记录,也不能切换分支
origin:远程仓库的意思,如果这个仓库是远程的那么必须使用这个选项
master:提交本地matser分支仓库
使用 git pull 命令
将远程仓库中修改的代码更新到本地分支中
使用 git push 远程仓库名 --delete 远程分支名
创造:
克隆现有存储库$ git clone ssh://[email protected]/repo.git
创建一个新的本地存储库
$ git init
当地变化:
Changed files in your working directory$ git status
Changes to tracked files
$ git diff
将所有当前更改添加到下一个提交
$ git add .
在中添加一些更改到下一次提交
$ git add -p
提交跟踪文件中的所有本地更改
$ git commit -a
提交先前进行的更改
$ git commit
更改最后一次提交
不要修改已发布的提交!
$ git commit --amend
提交历史
显示所有提交,从最新开始$ git log
显示特定文件随时间的变化e
$ git log -p
谁更改了中的内容和时间
$ git blame
分支机构和标签:
列出所有现有分支$ git branch -av
切换HEAD分支:
$ git checkout
根据您当前的HEAD创建一个新分支
$ git branch
基于远程分支创建一个新的跟踪分支
$ git checkout --track
删除本地分支
$ git branch -d
用标签标记当前提交
$ git tag
更新和发布:
列出所有当前配置的遥控器$ git remote -v
显示有关遥控器的信息
$ git remote show
添加名为的新远程存储库
$ git remote add
从下载所有更改,但不要集成到HEAD中
$ git fetch
下载更改并直接合并/集成到HEAD中
$ git pull
在远程上发布本地更改
$ git push
删除遥控器上的分支
$ git branch -dr
发布标签
$ git push --tags
合并与基础:
将合并到当前HEAD中$ git merge
将当前的HEAD重新设置到
不要重新发布已发布的提交!
$ git rebase
中止基准
$ git rebase --abort
解决冲突后继续进行基准
$ git rebase --continue
使用您配置的合并工具解决冲突
$ git mergetool
使用编辑器手动解决冲突,并(在解决之后)将文件标记为已解决
$ git add
$ git rm
撤消:
丢弃工作目录中的所有本地更改$ git reset --hard HEAD
放弃特定文件中的本地更改
$ git checkout HEAD
还原提交(通过产生具有相反更改的新提交)
$ git revert
将HEAD指针重置为上一次提交
…并丢弃此后的所有更改
$ git reset --hard
…并将所有更改保留为未分阶段的更改
$ git reset
…并保留未提交的本地更改
$ git reset --keep
免费的在线资源
http://www.git-tower.com/learn
git - the simple guide - no deep shit!
Git
本文章借鉴了CSDN17岁boy想当攻城狮的部分内容。