Git簡要教程

Blog遷移至 https://thianda.github.io
本文自2017-10-23 起再更新發佈會在https://thianda.github.io中,當前可訪問:https://thianda.github.io/ppt/git-learning.html查看。

本文作爲自己的筆記留存。大家想學習我推薦這個:史上最淺顯易懂的Git教程!

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

或者閱讀官方教程,中文的。

Git安裝配置

下載安裝git-for-windows

在windows安裝時選擇如下選項:

  • Use Git from Git Bash only
  • Use the OpenSSL libriary
  • Checkout as-is,commit as-is
  • Use MinTTY
  • 基本都是默認即可

安裝路徑建議爲C:/Git/或者D:/Git/

使用之前可在git安裝目錄新建名爲home的文件夾。並將此路徑添加到環境變量HOME中,添加到用戶變量即可。這樣在使用git時產生的所以配置文件均會保存到此目錄中,並且加快git bash的啓動速度。

否則環境變量中無HOME的變量,則會將配置信息以及生成的ssh密鑰保存在當前登錄用戶的根目錄,比如C:/Users/administrator/

常用命令

初始化git版本庫

git init

克隆版本庫

git clone <dir>

配置聯網的代理服務器

bash的ssh命令可在~/.ssh/config文件中配置如下一行,即可測試ssh -T [email protected]

ProxyCommand connect -H xxxx:8080 %h %p

配置git命令使用代理

git config --global http.proxy http://xxxx:8080
git config --global http.proxy user:password@http://xxxx:8080 # 需驗證用戶密碼時這樣寫
git config --global https.proxy http://xxxx:8080 # 設置git訪問https協議所使用的代理
git config --get http.proxy # 檢查是否設置成功
git config --global http.sslVerify false # 解決https證書錯誤的問題
# 經測試,在內網環境使用代理後使用 git協議 ([email protected]:xxx...) 無法依然使用,需要修改爲 https 協議,每次push都需要輸入賬戶密碼,比較麻煩
git config --global credential.helper wincred # 設置使用window憑據緩存賬號密碼,用於https方式push
# 當前git bash窗口有效
export http_proxy="http://127.0.0.1:8087"
export https_proxy="http://127.0.0.1:8087"
# cmd 代理設置
set http_proxy=http://proxy.yourname.com:8080
set http_proxy_user=
set http_proxy_pass=

取消git聯網的代理服務器

git config --global --unset http.proxy

ssh的說不好是什麼的配置

編輯~/.ssh/config文件,添加如下內容

Host github.com
Port 443
User git
Hostname ssh.github.com
PreferredAuthentications publickey
identityfile ~/.ssh/id_rsa
ProxyCommand connect -H PROXY_HOST_IP:PORT %h %p

用於在內網環境下ssh使用代理通過https協議與github。

配置用戶名和郵箱

git config --global user.email "[email protected]"
git config --global user.name "Your Name"

添加遠程倉庫

git remote add origin [email protected]:youname/yourrepo.git

添加文件

git add <filename>
git add . # 添加所有文件

提交

git commit -m '<comment>'
git commit -am '<comment>' # 若無增刪文件,可這樣使用,代替`git add .`&`git commit -m '<comment>'`

如果忘了加-m參數,會進入到linux的vim編輯界面,在輸入了comment後按ESC,輸入:wq按回車即可。

git commit --amend  --date="commit_time" # 修改上一次的提交時間
# commit_time的格式可以執行date -R來查看。若修改上一次時間爲當前時間,可執行:
git commit --amend --date="$(date -R)"  或
git commit --amend --date=`date -R`
# 其他時間自己構造即可:
git commit --amend --date="Sun, 25 Dec 2016 19:42:09 +0800"
git commit --amend --date="$(date -d '2018-02-02 18:15:15' -R)"

查看狀態

git status   # 在任何環節均可以查看狀態。

查看所有分支

git branch --all 

新建分支

git checkout -b <branch>

等同於:

git branch <branch>
git checkout <branch>

git 本地分支與遠程分支關聯

1) github上已經有master分支 和dev分支

git checkout -b dev   # 新建並切換到本地dev分支
git pull origin dev   # 本地分支與遠程分支相關聯

2) 在本地新建分支並推送到遠程

git checkout -b test
git push origin test   # 這樣遠程倉庫中也就創建了一個test分支

發佈dev分支

發佈dev分支指的是同步dev分支的代碼到遠程服務器,與新建分支並推送類似

git push origin dev:dev  # 這樣遠程倉庫也有一個dev分支了

在dev分支開發代碼

git checkout dev  # 切換到dev分支進行開發
# 開發代碼之後,我們有兩個選擇
# 第一個:如果功能開發完成了,可以合併主分支
git checkout master  # 切換到主分支
git merge dev  # 把dev分支的更改和master合併
git push  # 提交主分支代碼遠程
git checkout dev  # 切換到dev遠程分支
git push  # 提交dev分支到遠程
# 第二個:如果功能沒有完成,可以直接推送
git push  # 提交到dev遠程分支
# 注意:在分支切換之前最好先commit全部的改變,除非你真的知道自己在做什麼

刪除分支

git push origin :dev  # 刪除遠程dev分支,危險命令哦
# 下面兩條是刪除本地分支
git checkout master  # 切換到master分支
git branch -d dev  # 刪除本地dev分支

標籤

git tag # 查看標籤
git tag -l 'v1.4.2.*' # 搜索特定模式列
git tag -a v1.4 -m 'my version 1.4' # 添加標籤 -a 標籤名字 -m 標籤說明
git show v1.4 # 查看標籤版本信息
git tag v1.4-lw # 直接給出標籤名稱 創建輕量標籤
git tag -v [tag-name] # 驗證已經簽署的標籤 (git tag -s v1.4)
git tag v1.2 9fceb02 # 對早先的某次提交加註標籤
git push origin --tags # 推送所有標籤 默認 git push 不會推送標籤到遠端
git tag -d v1.4-lw # 刪除標籤

其他命令

git push -u origin master
git log
git reflog
ssh-keygen -t rsa -C "[email protected]"

徹底刪除某個文件的歷史記錄

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch FILE_PATH' --prune-empty --tag-name-filter cat -- --all

git push origin master --tags --force
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

FILE_PATH替換成要刪除的文件,執行即可。

一些alias

可將下面的配置手動保存到~/.gitconfig文件中

[alias]
    lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
    lgg = log --no-merges --color --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit
    ls = log --no-merges --color --stat --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit

效果等同於執行:

git config --global alias.lg log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
git config --global alias.lgg log --no-merges --color --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit
git config --global alias.ls log --no-merges --color --stat --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit

使用github.com

設置ssh key

// 1. 創建 ssh key,出現提示一路按回車
ssh-keygen -t rsa -b 4096 -C "[email protected]"
// 2. 讓 ssh-agent 在後臺運行 (start the ssh-agent in the background)
eval $(ssh-agent -s)
// 3. 指定密鑰給本地ssh-agent
ssh-add ~/.ssh/id_rsa
// 4. 複製公鑰,然後粘貼到github->Setting->SSH and GPG keys->New SSH key
clip < ~/.ssh/id_rsa.pub
// 5. 驗證ssh key
ssh -T [email protected]

使用方法

在git-bash中使用ssh協議的鏈接進行clone和push,即可基於ssh key免輸密碼。

設置啓動git bath後自動運行ssh-agent

將下面的代碼保存到~/.profile 或者 ~/.bashrc~表示當前用戶的用戶目錄。或者是前文提到的新建的home文件夾。

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
# 若要 ssh-agent 運行一段時間後自動停止,可將上面一行改成 ssh-add -t <seconds>
# 比如本人設置成了 ssh-add -t 1800
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

詳細講解:

第1步:創建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"

你需要把郵件地址換成你自己的郵件地址,然後一路回車,使用默認值即可,由於這個Key也不是用於軍事目的,所以也無需設置密碼。

如果一切順利的話,可以在用戶主目錄裏找到.ssh目錄,裏面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的祕鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面:

然後,點“Add SSH Key”,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容:
廖雪峯的blog圖片

圖片來自: 廖雪峯的官方網站

點“Add Key”,你就應該看到已經添加的Key。

參考

generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
adding-a-new-ssh-key-to-your-github-account
working-with-ssh-key-passphrases
CMD 和 Git 中的代理設置

拓展閱讀

git pull介紹

在線學習git命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章