Mac 配置Git環(huán)境與常用指令

一、Git安裝

  • 方法一:下載安裝包Git下載地址。
  • 方法二:安裝Homebrew,然后通過指令安裝brew install git。

二、生成密鑰

??? Git關(guān)聯(lián)遠(yuǎn)端倉(cāng)庫(kù)時(shí)候需要提供公鑰,本地保存私鑰,每次與遠(yuǎn)端倉(cāng)庫(kù)交互時(shí)候,遠(yuǎn)端倉(cāng)庫(kù)會(huì)用公鑰來驗(yàn)證交互者身份。
??? 生成密鑰ssh-keygen -t rsa -C "email address",根據(jù)提示需要選擇密鑰存放路徑。
??? 生成密鑰后,在路徑下生成兩個(gè)文件id_rsaid_rsa.pub,其中id_rsa文件保存的是私鑰,放在本地,id_rsa.pub文件是公鑰,需要將公鑰內(nèi)容上傳到遠(yuǎn)端倉(cāng)庫(kù),Mac 下直接用文本編輯打開公鑰文件。

三、配置提交文件時(shí)的用戶信息

git config --global user.name "name"
git config --global user.email "email address"

配置信息也可以修改,指令與上面的指令相同。使用git config --list查看Git的配置信息。

四、本地關(guān)聯(lián)遠(yuǎn)端倉(cāng)庫(kù)

  1. 打開本地文件夾,執(zhí)行git init命令,初始化文件夾作為本地的一個(gè)倉(cāng)庫(kù)。
  2. 將遠(yuǎn)端文件 clone 到本地目錄,git clone 遠(yuǎn)端文件URL。

五、常用指令

  • 名詞解釋:
    Workspace:工作區(qū)
    Index / Stage:暫存區(qū)
    Repository:倉(cāng)庫(kù)區(qū)(或本地倉(cāng)庫(kù))
    Remote:遠(yuǎn)程倉(cāng)庫(kù)

  • 生成密鑰
    ssh-keygen -t rsa -C "email address"

  • 配置

// 顯示當(dāng)前Git 配置
git config --list 

// 編輯Git配置文件
git config -e --global
 
// 配置提交文件時(shí)的用戶信息
git config --global user.name "name"
git config --global user.email "email address"
  • 新建一個(gè)倉(cāng)庫(kù)
// 在當(dāng)前目錄新建一個(gè) Git 倉(cāng)庫(kù)
git init 

// 下載項(xiàng)目
git clone 遠(yuǎn)端文件URL
  • 添加/刪除文件
// 添加指定文件到暫存區(qū)
git add filename1 filename2 ..... 

// 添加指定目錄及其子目錄到暫存區(qū)
git add dir

// 刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū)
git rm filename1 filename2 .....

// 停止追蹤指定文件,但該文件會(huì)保留在工作區(qū)
git rm --cached filename
  • 代碼提交
// 提交暫存區(qū)到倉(cāng)庫(kù)區(qū)
git commit -m "message"

// 提交暫存區(qū)的指定文件到倉(cāng)庫(kù)區(qū)
git commit  filename1 filename2 .....  -m "message"

// 提交工作區(qū)自上次commit之后的變化,直接到倉(cāng)庫(kù)區(qū)
git commit -a

// 提交時(shí)顯示所有diff信息
git commit -v

// 使用一次新的commit,替代上一次提交
// 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息
git commit --amend -m "message"

// 重做上一次commit,并包括指定文件的新變化
git commit --amend filename1 filename2 ..... 
  • 分支
// 列出所有本地分支
git branch

// 列出所有遠(yuǎn)程分支
git branch -r

// 列出所有本地分支和遠(yuǎn)程分支
git branch -a

// 新建一個(gè)分支,但依然停留在當(dāng)前分支
git branch branchname

// 新建一個(gè)分支,并切換到該分支
git checkout -b branchname

// 新建一個(gè)分支,指向指定commit
git branch branchname commitname

// 新建一個(gè)分支,與指定的遠(yuǎn)程分支建立追蹤關(guān)系
git branch --track branchname remotebranch

// 切換到指定分支,并更新工作區(qū)
git checkout branchname

// 切換到上一個(gè)分支
git checkout -

// 建立追蹤關(guān)系,在現(xiàn)有分支與指定的遠(yuǎn)程分支之間
git branch --set-upstream branchname remotebranch

// 合并指定分支到當(dāng)前分支
git merge branchname

// 選擇一個(gè)commit,合并進(jìn)當(dāng)前分支
git cherry-pick commitname

// 刪除分支
git branch -D branchname

// 刪除遠(yuǎn)程分支
git push origin --delete branchname
git branch -dr [remote/branch]
  • 查看 log
// 顯示有變更的文件
git status

// 顯示當(dāng)前分支的版本歷史
git log

// 顯示commit歷史,以及每次commit發(fā)生變更的文件
git log --stat

// 搜索提交歷史,根據(jù)關(guān)鍵詞
git log -S keyword

// 顯示某個(gè)文件的版本歷史,包括文件改名
git log --follow filename
git whatchanged filename

// 顯示指定文件相關(guān)的每一次diff
git log -p filename

// 顯示過去5次提交
git log -5 --pretty --oneline

// 顯示所有提交過的用戶,按提交次數(shù)排序
git shortlog -sn

// 顯示指定文件是什么人在什么時(shí)間修改過
git blame filename

// 顯示暫存區(qū)和工作區(qū)的差異
git diff

// 顯示暫存區(qū)和上一個(gè)commit的差異
git diff --cached filename

// 顯示工作區(qū)與當(dāng)前分支最新commit之間的差異
git diff HEAD

// 顯示兩次提交之間的差異
git diff [first-branch]...[second-branch]

// 顯示今天你寫了多少行代碼
git diff --shortstat "@{0 day ago}"

// 顯示某次提交的元數(shù)據(jù)和內(nèi)容變化
git show [commit]

// 顯示某次提交發(fā)生變化的文件
git show --name-only [commit]

// 顯示某次提交時(shí),某個(gè)文件的內(nèi)容
git show [commit]: filename

// 顯示當(dāng)前分支的最近幾次提交
git reflog
  • 遠(yuǎn)程同步
// 下載遠(yuǎn)程倉(cāng)庫(kù)的所有變動(dòng)
git fetch [remote]

// 顯示所有遠(yuǎn)程倉(cāng)庫(kù)
git remote -v

// 顯示某個(gè)遠(yuǎn)程倉(cāng)庫(kù)的信息
git remote show [remote]

// 增加一個(gè)新的遠(yuǎn)程倉(cāng)庫(kù),并命名
git remote add [shortname] [url]

// 取回遠(yuǎn)程倉(cāng)庫(kù)的變化,并與本地分支合并
git pull [remote] branchname

// 上傳本地指定分支到遠(yuǎn)程倉(cāng)庫(kù)
git push [remote] branchname

// 強(qiáng)行推送當(dāng)前分支到遠(yuǎn)程倉(cāng)庫(kù),即使有沖突
git push [remote] --force

// 推送所有分支到遠(yuǎn)程倉(cāng)庫(kù)
git push [remote] --all
  • 撤銷
// 恢復(fù)暫存區(qū)的指定文件到工作區(qū)
git checkout filename

// 恢復(fù)某個(gè)commit的指定文件到暫存區(qū)和工作區(qū)
git checkout [commit] filename

// 恢復(fù)暫存區(qū)的所有文件到工作區(qū)
git checkout .

// 重置暫存區(qū)的指定文件,與上一次commit保持一致,但工作區(qū)不變
git reset filename

// 重置暫存區(qū)與工作區(qū),與上一次commit保持一致
git reset --hard

// 重置當(dāng)前分支的指針為指定commit,同時(shí)重置暫存區(qū),但工作區(qū)不變
git reset [commit]

// 重置當(dāng)前分支的HEAD為指定commit,同時(shí)重置暫存區(qū)和工作區(qū),與指定commit一致
git reset --hard [commit]

// 重置當(dāng)前HEAD為指定commit,但保持暫存區(qū)和工作區(qū)不變
git reset --keep [commit]

// 新建一個(gè)commit,用來撤銷指定commit
// 后者的所有變化都將被前者抵消,并且應(yīng)用到當(dāng)前分支
git revert [commit]

// 暫時(shí)將未提交的變化移除,稍后再移入
git stash
git stash pop

六、遇到的問題

  1. 拒絕訪問
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

解決方法:ssh-add 私鑰路徑,其中ssh-add命令是把專用密鑰添加到ssh-agent的高速緩存中。

  1. 執(zhí)行 git branch -a看不到新創(chuàng)建的分支
    原因:這條命令并沒有每一次都從遠(yuǎn)程更新倉(cāng)庫(kù)信息。
    解決方法:手動(dòng)刷新倉(cāng)庫(kù)信息git fetch origin。

七、參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容