手把手教你使用Git

0、查看本機公鑰

步驟: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

一、配置多個git倉庫

多倉庫之間 '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

second@mail.com 工做郵箱地址

ssh-keygen -t rsa -C 'second@mail.com' -f id_rsa_second工具

配置多個倉庫測試

在.ssh目錄建立config文本文件並完成相關配置(最核心的地方)

每一個帳號單獨配置一個Host,每一個Host要取一個別名,每一個Host主要配置HostNameIdentityFile兩個屬性便可

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

四、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分支上對兩個文件進行修改提交.

文件因爲修改的是不一樣地方,因此自動合併。

咱們查看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顯示工做空間是乾淨的。

歡迎關注

相關文章
相關標籤/搜索