步骤:git
一、进入.ssh目录github
- cd ~/.ssh
二、找到id_rsa.pub文件sql
- ls / ll
三、查看文件shell
- 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.pubvim
多仓库之间 'ssh-key切换'
app
ssh-keygen ---- 一顿回车便可
# 实际操做 换成你的邮箱便可
ssh-keygen -t rsa -C "youremail@example.com"
能够在客户端的家目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。
ssh
生成新的ssh-keyide
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"
git clone 项目地址
常规操做
git add . .
git status
git commit -m "代码描述"
git status
git pull
git push
解决 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>
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分支上对两个文件进行修改提交.
文件因为修改的是不一样地方,因此自动合并。咱们查看DataScience文件的内容,==上面和下面的内容分别表明了不一样分支的修改内容,将冲突标记去掉,而后内容根据需求进行恰当的修改,而后进行一次提交即完成了冲突的解决。
修改文件相同则会产生合并冲突
(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
显示工做空间是干净的。