Git 的基本用法
設置姓名和地址
$ git config --global user.name "Your Name"
$ git config --global user.email "your_email@email.com"
- 可以設置多用用戶,就不要用--global,具體用法以后在研究。
提高可讀性
$ git config --global color.ui auto
Mac OSX 上的vim設置
$ git config --global core.editor /usr/bin/vim -f
- 如不設置會報錯:"There was a problom with the editor 'vi'."
設置 SSH Key
$ ssh-keygen -t rsa -C "your_email@email.com"
$ cat ~/.ssh/id_rsa.pub
# 把id_rsa.pub內容添加到github.com
# 然后測試
$ ssh -T git@github.com
初始化倉庫
$ mkdir git-tutorial
$ cd git-tutorial
$ git init
查看倉庫的狀態
$ git status
十分常用,務必牢記!
向暫存區中添加文件
$ git add <file>
$ git status # 查看發生的變化
保存倉庫的歷史記錄
$ git commit -m "First commit"
git add 和 git commit 可以合拼成如下命令:
$ git commit -am "Your commit"
- -m 參數后加“提交信息”
- 不加參數可以記述詳細提交信息,格式如下:
第一行簡述內容
第二行空行
第三行以后,記述更改的原因和詳細內容
查看提交日志
$ git log
$ git log --pretty-short # 只顯示簡述
$ git log <path|file> # 只顯示指定目錄或文件
$ git log -p # 顯示提交前后差異
$ git log -p <file> # 只顯示改文件的差異
查看更改前后的差別
$ git diff
$ git diff HEAD # 查看工作樹和最新提交的差別
- 養成良好習慣:在執行git commit 之前先執行 git diff HEAD 查看本次提交與上次提交的差別。
- HEAD 時指向當前分支中最新一次提交的指針。
顯示分支一覽表
$ git branch
\* master
feature-A
- 帶‘*’號表示當前分支
創建、切換分支
$ git checkout -b <branch_name>
也可以分開成兩個命令:
$ git branch <branch_name> # 創建分支
$ git checkout <branch_name> # 切換分支
$ git checkout - # 切換回上一個分支
合并分支
$ git merge --no-ff <branch_name>
- 為了在歷史記錄中明確記錄下本次分支合并,需要創建合并提交,合并時加上參數--no-ff。
以圖表形式查看分支
$ git log --graph
- 可以以圖片形式輸出提交日志,非常直觀,務必牢記。
回溯歷史版本
$ git reset
$ git reset --hard <HASH>
- 要讓倉庫的HEAD、暫存區、當前工作樹回溯到指定狀態,需要用到
git reset --hard
- 只要提供目標時間點的哈希值。
推進歷史狀態
$ git reflog
$ git reset --hard <HASH>
-
git reflog
查看當前倉庫執行過得操作日志 - 即便開發者錯誤執行了git 的操作,基本也可以利用
git reflog
來恢復到原先的狀態。
消除沖突
README.md
# git-toturial
<<<<<<<< HEAD
- feature-A
========
- fix-B
>>>>>>>> fix-B
-
=========
以上部分是當前HEAD的內容,以下部分是要合并的fix-B分支的內容。
修改提交信息
$ git commit --amend
壓縮歷史
$ git rebase -i
$ git rebase -i HEAD~2 # 最新的兩次歷史
- 把
pick
改成fixup
,原來的pick部分就會從歷史中抹去。 - 一般用于拼寫錯誤等小修改。
推送至遠程倉庫
在github上新建一個倉庫。倉庫名最好與本地倉庫保持一致。
- 創建時不要勾選README選項,因為github自動生成的README文件與本地倉庫失去了整合性。
添加遠程倉庫
$ git remote add origin git@github.com:<username>/<repository_name>.git
- 執行上述命令后,git會自動將遠程倉庫的名稱設置成origin
推送至master分支
$ git push -u origin master
- -u 參數可以在推送的同時,將origin倉庫的master分支設置為本地倉庫當前分支的upstream(上游)。
- 添加了這個參數,將來運行
git pull
從遠程倉庫獲取內容時,本地倉庫的這個分支就可以直接從origin的master分支獲取內容,省去了另外添加參數的麻煩。
推送至master以外的分支
$ git checkout <branch_name>
$ git push -u origin <branch_name>
- 這樣就可以把分支push給遠程倉庫并保持分支名稱不變。
從遠程倉庫獲取
$ git clone git@github.com:<username>/<repository_name>.git
查看當前分支的相關信息
$ git branch -a
- -a 參數可以同時顯示本地倉庫和遠程倉庫的分支信息。
獲取遠程的分支
$ git checkout -b <branch_name> origin/<branch_name>
- -b 參數后是本地倉庫中新建分支的名稱。
- 再后面是獲取來源的分支名稱。
獲取最新的遠程倉庫分支
$ git pull origin <branch_name>
- 這樣就可以將本地
<brach_name>
的分支更新到最新狀態。
備注
$ git config --global push.defalt matching