git 極簡教程
文章目錄
git 學習資源
核心理解
三個區域
- 工作目錄
- 索引(暫存區)
- 歷史
提交
git的提交是文件歷史狀態的快照 ,Git 中的分支,其實本質上僅僅是個指向 commit 對象的可變指針。Git 會使用 master 作爲分支的默認名字。在若干次提交後,你其實已經有了一個指向最後一次提交對象的 master 分支,它在每次提交的時候都會自動向前移動。
HEAD
Git 是如何知道你當前在哪個分支上工作的呢?其實答案也很簡單,它保存着一個名爲 HEAD 的特別指針。它是一個指向你正在工作中的本地分支的指針(譯註:將 HEAD 想象爲當前分支的別名)。每次提交後 HEAD 隨着當前分支一起向前移動 。切換到哪個分支,哪個分支就成爲自動向前移動的指針HEAD。 HEAD^ 代表上一次提交的版本,HEAD^^ 代表上上次提交的版本,HEAD~100 表示上 100 次提交的版本
合併
合併分兩種情況,fast-forward(快進),分叉合併。前者中兩個分支是直系親屬,後者,沒有直系關係,但是有共同的祖先。
本地常用操作
本地新建、添加、提交
mkdir rep_name
cd rep_name
git init # 本地倉初始化
...
git add . # 添加到索引
git commit -m 'xxx' # 提交到歷史
git status # 查看狀態
git log --graph --pretty=oneline --abbrev-commit # 查看提交、合併歷史
查看、刪除暫存區文件
git ls-files # 查看
git rm -r --cached <file_name>
分支新建、切換、刪除、合併、重命名
git branch # 查看分支列表
git branch <branch_name> # 新建分支
git checkout <branch_name> # 切換分支
git branch -b <branch_name> # 新建分支並切換
git branch -d <branch_name> # 刪除分支
# 切換到 master 分支,與另一個分支合併
git checkout master
git merge <branch_name>
git branch -m <old_name> <new_name> # 分支重命名
移動 HEAD 到指定提交、分支、標籤(切換)
每一次提交都是一個歷史節點,而 HEAD、分支、標籤分佈在部分歷史節點之上。
git checkout <branch_name> | <tag_name> | <commit_id> # 移動 HEAD 到指定分支、標籤、提交(索引和工作目錄同步改變)
git checkout HEAD~ # 將head指向上一次提交的節點,同時恢復索引和工作目錄,分支指向不動
版本回退與文件恢復
- 恢復上一次提交到索引
git reset HEAD <file>
- 恢復索引到工作目錄
git checkout -- <file>
- 版本回退
git reset --hard <commit_id> | HEAD^
注: 與切換分之不同- 重新回到回退之前版本,使用
git reflog
找到對應的 commit id
- 重新回到回退之前版本,使用
修改提交(覆蓋提交)
git commit --amend
git commit --amend --no-edit
與遠程倉(github)交互
建立 ssh 連接
- 本地安裝 git
- 產生密鑰
ssh-keygen -t rsa # 之後輸入三個回車
- 將
C:\Users\Administrator\.ssh\id_rsa.pub
中的公鑰添加到 github 個人賬戶 - 測試
ssh -T [email protected]
本地倉與遠程倉關聯
本地先有
- 在 github 新建倉庫
- 本地與遠程建立關聯
git remote add origin [email protected]:username/rep_name.git # 建立關聯 git remote # 查看與之關聯的遠程倉 git remote remove origin # 取消與遠程倉的關聯
遠程先有
git clone [email protected]:username/rep_name.git # 默認 clone master 分支
git clone -b <branch_name> <address> # clone 指定分支
本地與遠程的同步
git fetch origin <branch_name> # 下載遠程分支到本地
git pull origin <branch_name> # 下載遠程分支到本地,並與當前分支合併
git push origin <branch_name> # 上傳當前分支,並與遠程倉指定分支合併
其它
git branch -r # 查看遠程分支
gitignore 規則
新建 .gitignore 文件,在其中添加 git 命令忽略的目錄。但是,.gitignore 只能忽略那些原來沒有被 track 的文件,如果某些文件已經被納入了版本管理中,則修改 .gitignore 是無效的,解決辦法:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git 別名
建議直接複製更改 .gitconfig
文件
[user]
email = [email protected]
name = daibingh
[alias]
st = status
co = checkout
ci = commit
br = branch
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit