手把手教你学Git
Git 使用手册独家实战
0、查看本机公钥
步骤:
- 1、进入.ssh目录
- cd ~/.ssh
- 2、找到id_rsa.pub文件
- ls / ll
- 3、查看文件
- cat id_rsa.pub
JackFeng@JackFeng MINGW64 ~/Desktop
$ cd ~/.ssh
JackFeng@JackFeng MINGW64 ~/.ssh
$ ls
config id_rsa id_rsa.pub id_rsa_sql id_rsa_sql.pub known_hosts
JackFeng@JackFeng MINGW64 ~/.ssh
$ cat id_rsa.pub
1、配置多个git仓库
多仓库之间 'ssh-key切换'
#1、生成客户端自己的密钥对
ssh-keygen ---- 一顿回车即可
# 实际操作 换成你的邮箱即可
ssh-keygen -t rsa -C "youremail@example.com"
可以在客户端的家目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。
生成新的ssh-key
#second@mail.com 工作邮箱地址
ssh-keygen -t rsa -C 'second@mail.com' -f id_rsa_second
配置多个仓库
在.ssh目录创建config文本文件并完成相关配置(最核心的地方)
每个账号单独配置一个Host,每个Host要取一个别名,每个Host主要配置HostName和IdentityFile两个属性即可
Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令,例如:
HostName 这个是真实的域名地址
IdentityFile 这里是id_rsa的地址
PreferredAuthentications 配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等
User 配置使用用户名
config
# 配置github.com
Host github.com
HostName github.com
IdentityFile ~\.ssh\id_rsa
PreferredAuthentications publickey
User yinjie.feng
# 配置SQLSQ
Host SQL
HostName github.com
IdentityFile ~\.ssh\id_rsa_sql
PreferredAuthentications publickey
User yinjie.feng
测试是否调通
JackFeng@JackFeng MINGW64 ~/.ssh
$ vim config
JackFeng@JackFeng MINGW64 ~/.ssh
$ ssh -T git@github.com
Hi A2Data! You've successfully authenticated, but GitHub does not provide shell access.
JackFeng@JackFeng MINGW64 ~/.ssh
$ vim config
JackFeng@JackFeng MINGW64 ~/.ssh
$ ssh -T git@SQL
Hi MineData-SQL! You've successfully authenticated, but GitHub does not provide shell access.
git add、git commit、git remote add、git push
需要说明的一点,在git commit 时需要一次身份验证,正确输入你的用户名和邮箱就可以了。
另外注意:github根据配置文件的user.email来获取github帐号显示author信息,所以对于多帐号用户一定要记得将user.email改为相应的email(monster@mail.com)。
总结一下:其实建立第二个密钥对的区别就在于对第二密钥对的声明,因此需要在.ssh目录下添加config文件,添加语句dentityFile ~/.ssh/id_rsa_sql声明这是第二个密钥对。这条连接命令就体现出来了。
查看用户名
git config user.name
git config user.email
修改用户名
git config --global user.name "xxx"
git config --global user.email "xxx"
2、从远程项目拉取
git clone 项目地址
3、提交代码到远程仓库
常规操作
##添加
git add . .
#查看状态
git status
# 提交
git commit -m "代码描述"
# 再次查看状态
git status
# 拉取最新代码
git pull
# 提交
git push
4、git分支操作
Git初始化
解决 fatal: Not a git repository (or any of the parent directories): .git 问题
git init
git clone --- 克隆项目
JackFeng@JackFeng MINGW64 /d/Practice
$ git clone git@github.com:MineData-SQL/SQL.git
Cloning into 'SQL'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
创建分支
git branch <branch_name> #指定分支名称
git checkout -b ["分支名"]
查看分支
git branch # 查看所有分支,* 号所属代表当前分支
git branch # 查看分支详情,包括分支指向得commitid及提交信息
切换分支
git checkout <branch_name> #切换到指定分支
git checkout -b <branch_name> #创建并切换到指定分支
删除分支
git branch -d <branch_name>
.#删除一个干净的分支(即相对当前分支而言该分支没有新的提交记录)
git branch -D <branch_name>
.#强制删除一个分支,该分支有没有合并到当前分支的提交记录
注意:删除分支前都需要先切换到其他分支才能进行删除操作
分支恢复
思路:对于已经有提交记录的分支删除后,实际上只是删除指针,commit记录还保留,如果想恢复,需要使用git reflog查找该分支指向的
commitId,然后根据commitId创建新的分支
HEAD@{1}
git reflog
git branch <branch_name> <hash_val>
#根据指定commit创建新分支
分支改名
git branch -m <branch_name> newname
JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
$ git branch -m master-one master-O
JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
$ git branch
master
master-O
* master-two
分支合并
git merge
#将指定分支合并到当前分支
如果两个分支没有产生分叉情况,那么会进行快速合并,即fast-forward
方式,它并不会产生新的commitId,只是改变了指针的指向,产生分叉合并可能会有冲突情况。示例:
合并master-O分支到master分支,此时合并为
fast-forward
方式
分支合并细节
git merge -ff -m "msg"
#合并分支时禁用Fast forward模式如果使用
fast-forward
方式进行分支合并,只是简单改变了分支指针,而不会产生新的commit
记录。为了保证合并数据的完整性,我们也可以在合并时指定不使用
fast-forward
方式,使用--ff
选项。这样,在merge
时就会生成一个新的commit,从日志上就可以看到分支合并记录了。示例:我们在master-two分支上新增一次提交,然后合并到master分支上,
git log
查看最新一次的提交记录,显示的正是我们合并分支时的记录
git log --pretty=oneline -1
JackFeng@JackFeng MINGW64 /d/Practice/SQL (master)
$ git checkout master-two
Switched to branch 'master-two'
JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
$ echo " thank you for attention DataScience " >> a2data.txt
JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
$ git add a2data.txt
warning: LF will be replaced by CRLF in a2data.txt.
The file will have its original line endings in your working directory
JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
$ git commit -m " add file"
[master-two 59a8816] add file
1 file changed, 1 insertion(+)
create mode 100644 a2data.txt
JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
JackFeng@JackFeng MINGW64 /d/Practice/SQL (master)
$ git merge --ff -m "meger master-two branch" master-two
Updating ab83ffb..59a8816
Fast-forward (no commit created; -m option ignored)
a2data.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 a2data.txt
JackFeng@JackFeng MINGW64 /d/Practice/SQL (master)
$ git log --pretty=oneline -1
59a88161e630f0853b852946fddb6c7e787906fe (HEAD -> master, master-two) add file
冲突解决
当对分叉分支进行合并时,如果两个分支都对同一文件进行了修改,那么合并时就有可能会产生冲突情况。
如果两个分支对同一文件的修改是有规律的,比如对不同地方的修改,那么git工具可以实现自动合并.
如果无法自动合并,则需要对冲突文件进行手动修改,修改完成后使用
git add
表示冲突已经解决,然后使用git commit
进行提交示例:在master分支上对两个文件进行修改提交.
a2data.txt和**DataScience*。
然后切换到master-O分支上对两个文件进行修改提交.
文件由于修改的是不同地方,所以自动合并。
我们查看readme文件的内容,==上面和下面的内容分别代表了不同分支的修改内容,将冲突标记去掉,然后内容根据需求进行恰当的修改,然后进行一次提交即完成了冲突的解决。
修改文件相同则会产生合并冲突
(merge conflict)
master
master-O
合并分支
分支暂存
git stash
#将工作暂存
git stash list
#列出所有的暂存状态从暂存区之中进行恢复,有两种处理方式:
1.先恢复,而后再删除暂存
git stash apply
git stash drop
2.恢复的同时也将stash内容删除
git stash pop
当我们在分支上进行代码开发时,有可能会接到突发需求,而当前的代码尚未完成,所以还不能直接提交。
为了解决这样的问题,git就提供了分支暂存的机制,可以将开发一半的分支进行保存,在适当的时候进行代码恢复。
示例:在master-two分支上新建文件,然后添加到暂存区表示尚未完成的任务,对当前分支进行暂存,
git status
显示工作空间是干净的。
手把手教你学Git的更多相关文章
- 30分钟手把手教你学webpack实战
30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...
- 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发
每天记录一点:NetCore获得配置文件 appsettings.json 用NetCore做项目如果用EF ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...
- 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序
上一篇:手把手教你学Dapr - 2. 必须知道的概念 注意: 文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Termin ...
- 推荐!手把手教你使用Git
推荐!手把手教你使用Git 原文出处: 涂根华的博客 http://blog.jobbole.com/78960/ 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与 ...
- 【转载】手把手教你使用Git(简单,实用)
手把手教你使用Git(简单,实用) 标签: git 2016年04月21日 20:51:45 1328人阅读 评论(0) 收藏 举报 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. ...
- 手把手教你学Dapr - 4. 服务调用
上一篇:手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 介绍 通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠.安全地通信. 为什么不直接用Ht ...
- 手把手教你学Dapr - 5. 状态管理
上一篇:手把手教你学Dapr - 4. 服务调用 介绍 使用状态管理,您的应用程序可以将数据作为键/值对存储在支持的状态存储中. 您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来 ...
- 手把手教你学Dapr - 6. 发布订阅
上一篇:手把手教你学Dapr - 5. 状态管理 介绍 发布/订阅模式允许微服务使用消息相互通信.生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息.这涉及将它们写入输入通道.同样,消 ...
- 手把手教你学Dapr - 7. Actors
上一篇:手把手教你学Dapr - 6. 发布订阅 介绍 Actor模式将Actor描述为最低级别的"计算单元".换句话说,您在一个独立的单元(称为actor)中编写代码,该单元接收 ...
随机推荐
- 关于android应用程序的入口
android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如a ...
- 万达乐园VS阿里帝国 谁将是未来娱乐产业的龙头?
国内实体行业大佬王健林和互联网行业巨头马云,这次又不约而同地想到一块去了.从王健林叫板迪士尼大搞借势营销,到最近马云成立大文娱工作领导小组,明显的趋势表明娱乐越来越成为各界大佬们未来掘金的新战场.只不 ...
- c++中的函数重载、函数重写、函数重定义
目录 一.函数重载 二.函数重写 三.函数重定义 为了更加深刻的理解 函数重载.重写.重定义,我们可以带着如下这两个问题去思考: 1.子类中是否可以定义父类中的同名成员?为什么? 可以,因为子类与父类 ...
- Docker深入浅出系列 | 单机Nginx+Springboot实战
目录 Nginx+Springboot实战 前期准备 实战目标 实战步骤 创建Docker网络 搭建Mysql容器 搭建额度服务集群 搭建Nginx服务 验证额度服务 附录 Nginx+Springb ...
- NumPy——统计函数
引入模块import numpy as np 1.numpy.sum(a, axis=None)/a.sum(axis=None) 根据给定轴axis计算数组a相关元素之和,axis整数或元组,不指定 ...
- Dubbo中@Service工作过程解析
Dubbo中@Service工作过程解析 Spring中的BeanPostProcessor 首先我们应当了解到在spring体系中BeanPostProcessor是什么.加载流程 它是什么 Bea ...
- BUI Webapp用于项目中的一点小心得
接触BUI也有一段时间,也用在了移动端的项目开发中,总的来说,该框架用起来也挺灵活的,控件可以自由定制,前提是自己能认真地学习该框架的api,因为api里面说的东西比较详细,如果没有仔细看的,可能有些 ...
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...
- seo搜索优化教程12-网站SEO诊断
为了使大家更方便的了解及学习网络营销推广.seo搜索优化,星辉信息科技强势推出seo搜索优化教程.此为seo教程第12课 行业分析 在搜索引擎中检索自己的站点,在检索结果及相关网站中分析自己在行业内的 ...
- 什么是SSH与SSH客户端
1.什么是SSH? SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SS ...