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文件的內容:
圖片來自: 廖雪峯的官方網站
點“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 中的代理設置