步驟: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
顯示工做空間是乾淨的。