專欄原創出處:github-源筆記文件 ,歡迎 Star,轉載請附上原文出處鏈接和本聲明。
使用前的配置
檢查你的配置
git config --list --show-origin
# 查看所有的配置以及它們所在的文件
git config --list
# 所有 Git 當時能找到的配置
全局配置
配置文件在git config --list --show-origin
命令中可查看
git config --global user.name "[name]"
# 對你的 commit 操作設置關聯的用戶名
git config --global user.email "[email address]"
# 對你的 commit 操作設置關聯的郵箱地址
git config --global color.ui auto
# 啓用有幫助的彩色命令行輸出。
本地工程配置
配置文件在當前工程目錄/.git/config 文件中
git config --local user.name xxx
git config --local user.email [email protected]
創建倉庫
當着手於一個新的倉庫時,你只需創建一次。要麼在本地創建,然後推送到 GitHub;要麼通過 clone 一個現有倉庫。
git init
# 將現有目錄轉換爲一個 Git 倉庫
git clone [url]
# Clone(下載)一個已存在於 GitHub 上的倉庫,包括所有的文件、分支和提交 (commits)
進行更改
瀏覽並檢查項目文件的發展。
git add [file]
# 將文件進行快照處理內容寫入緩存區,用於版本控制
git commit -m"[descriptive message]"
# 將緩存區內容添加到倉庫中,永久地記錄在版本歷史中
git rm -rf [file]
# 從工作區和索引中刪除文件
檢查歷史和狀態
git log
# 列出當前分支的版本歷史
git log --graph --decorate --oneline
# 用以展示經過修飾的提交歷史
git log --grep apples --oneline
# 如果只想要看包含關鍵字“apple”的提交
git log HEAD~5..HEAD^ --oneline
# 查看歷史提交記錄中兩個點之間的提交歷史
git log branch_name..master --oneline
# 對於分支可以使用該命令
git log --follow [file]
# 列出文件的版本歷史,包括重命名
git blame path/to/file
# 瞭解誰對一個文件做了哪些改動
git diff [first-branch]...[second-branch]
git diff HEAD HEAD~2
# 對比當前 HEAD 和前兩個提交
git show [commit]
# 輸出指定 commit 的元數據和內容變化
git status -s
# 顯示工作區狀態
重做提交
Erase mistakes and craft replacement history
git commit --amend
# 刪除前一次提交,並創建一個新的提交記錄以替代之前的提交
git reset [commit]
# 撤銷所有 [commit] 後的的提交,在本地保存更改
git reset --hard [commit]
# 放棄所有歷史,改回指定提交
git rebase -i origin/master
# 交互式變基 (rebase)。它可以用來編輯提交信息,或者將多個提交壓縮成一個提交
git revert COMMIT_ID
# 創建一個新的提交,讓當前項目狀態恢復到指定提交之前
小心!更改歷史可能帶來不良後果。如果你需要更改 GitHub(遠端)已有的提交,請謹慎操作。如果你需要幫助,可訪問 github.community 或聯繫支持 (support)。
分支
分支是使用 Git 工作的一個重要部分。你做的任何提交都會發生在當前“checked out”到的分支上。使用 git status 查看那是哪個分支。
git branch
# 列出當前項目分支
git branch [branch-name]
# 創建一個新分支
# 說明:如果報錯「fatal: 不是一個有效的對象名:'master'。」說明初始化倉庫後還沒有任何提交記錄。
git checkout [branch-name]
# 切換到指定分支並更新工作目錄 (working directory)
git merge [branch]
# 將指定分支的歷史合併到當前分支。這通常在拉取請求 (PR) 中完成,但也是一個重要的 Git 操作。
git branch -d [branch-name]
# 刪除指定分支
同步更改
將你本地倉庫與 GitHub.com 上的遠端倉庫同步
git fetch
# 下載遠端跟蹤分支的所有歷史
git merge
# 將遠端跟蹤分支合併到當前本地分支
git push
# 將所有本地分支提交上傳到 GitHub
git pull
# 使用來自 GitHub 的對應遠端分支的所有新提交更新你當前的本地工作分支。git pull 是 git fetch 和 git merge 的結合。
git cherry-pick COMMIT_ID
# 假設我們和同事在各自單獨的分支上進行開發,同事有一個重要的提交我們也想應用到自己的分支上來,但是不需要對方分支的其他提交
多 SSH-Key 生成及代理配置
生成一個新的 SSH Key
$ ssh-keygen -t rsa -b 4096 -C "[email protected]"
# 執行命令生成 ssh-key,需要指定相應的郵箱
> Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [如果不更改文件名直接回車 ]
# 推薦不使用默認文件名 id_rsa ,按實際場景重新命名文件名稱,比如:/Users/you/.ssh/id_rsa_github_my
> Enter passphrase (empty for no passphrase): [輸入密碼,回車 ]
> Enter same passphrase again: [再次輸入密碼,回車 ]
$ ll /Users/you/.ssh
# 可以看到剛剛生成的 ssh-key id_rsa_github_my 文件
# 複製對應 id_rsa_github_my.pub 內容添加至 WEB 端配置 SSH 內容地方即可。
將 SSH Key 添加到不同的代理
$ vim /Users/you/.ssh/config
# 配置文件參數
# Host : Host 可以看作是一個你要識別的模式,對識別的模式,進行配置對應的的主機名和 ssh 文件(可以直接填寫 ip 地址)
# HostName : 要登錄主機的主機名(建議與 Host 一致)
# User : 登錄名(如 gitlab 的 username)
# IdentityFile : 指明上面 User 對應的 identityFile 路徑
# Port: 端口號(如果不是默認 22 號端口則需要指定)
Host github.com
HostName github.com
Preferredauthentications publickey
IdentityFile ~/.ssh/id_rsa_github_my
Port 22
Host dev-git.gaolvzongheng.com
HostName dev-git.gaolvzongheng.com
Preferredauthentications publickey
IdentityFile ~/.ssh/id_rsa_github_gaolvgo
Port 22
Host 119.3.177.8
HostName 119.3.177.8
Preferredauthentications publickey
IdentityFile ~/.ssh/id_rsa_github_gaolvgo
Port 22
測試配置是否成功
$ .ssh ssh -T [email protected]
Enter passphrase for key '/Users/liwei/.ssh/id_rsa_github_my':
Hi GourdErwa! You've successfully authenticated, but GitHub does not provide shell access.
術語表
-
HEAD:代表你當前的工作目錄。使用 git checkout 可移動 HEAD 指針到不同的分支、標記 (tags) 或提交
-
.gitignore 文件:
有時一些文件最好不要用 Git 跟蹤。這通常在名爲 .gitignore 的特殊文件中完成。你可以在 github.com/github/gitignore 找到有用的 .gitignore 文件模板。