Mac 環(huán)境配置
- 配置用戶名
git config --global user.name "郵箱前綴"
git config --global user.email "xxx@xx.com"
注意:如果是修改郵箱,還需要git commit --amend --reset-author,然后才能 git push
- ssh 密鑰生成
生成 ssh-key。終端命令如下
ssh-keygen -t rsa -b 1024
- -t rsa 表示使用 RSA 算法
- -b 指定密鑰長度
- 輸入上述命令后,終端會詢問生成的文件名,可直接回車鍵,保持默認不變
- 當詢問 passphrase 時,可直接回車鍵,表示不需要輸入密碼。
這之后會得到兩個文件:id_rsa(私鑰文件) 和 id_rsa.pub(公鑰文件)
- 配置 ssh
在 .ssh 文件夾中新建一個名為“config”的文件,文件內容如下
Host XXX.com
User xxx // 為你的郵箱前綴
Port XXX
IdentityFile ~/.ssh/id_rsa // 你的 ssh 私鑰文件名
- 如果要使用 Gerrit 管理代碼,需要在 Gerrit 添加證書
- 終端輸入如下命令
cat ~/.ssh/id_rsa.pub,將顯示的公鑰復制到剪貼板上 - 登錄到 gerrit 到 settings/ssh-keys 頁
- 點擊 "Add Key",粘貼剛才復制的公鑰
創(chuàng)建倉庫
1.從遠程庫克隆
- 登錄github-Create a new repository-輸入Repository name-勾選Initialize this repository with a README-點擊Create repository按鈕
-
點擊圖片一按鈕,復制https地址,在本地電腦命令行窗口中輸入
git clone https地址
圖片一 - 進入克隆的文件夾里可以看到有個一個README.md文件(README.md中內容是github項目頁面中展示的內容,使用Markdown語法)
文件管理
git本地原理如圖二所示:

-
添加文件
$ git add abc.txt將文件abc.txt添加到暫存區(qū)stage中
$ git commit -m "添加了abc.txt文件"將暫存區(qū)中的文件提交到當前分支master中
$ git push origin master將本地主分支推送到遠程主分支上備注:
git add的幾種形式-
git add .把工作區(qū)文件的變化提交到暫存區(qū),包括修改、新的文件,但不包括刪除的文件 -
git add -u即(git add --update)僅監(jiān)控已經被add過的文件,將修改提交到暫存區(qū),但不會提交新的文件 -
git add -A即(git add --all)是上面兩個功能的合集
-
-
刪除文件
- 在工作區(qū)刪除文件
$ rm abc.txt刪除文件(或者直接在文件管理器中把沒用的文件刪了) - 在版本庫中刪除文件,分兩步執(zhí)行
-
git rm abc.txt刪除版本庫中的文件 -
git commit -m "刪除文件"提交
-
- 刪錯了沒關系,因為版本庫里還有呢,所以可以很輕松地把誤刪的文件恢復到最新版本
git checkout -- abc.txt其實就是用版本庫中的文件替換工作區(qū)
- 在工作區(qū)刪除文件
刪除文件夾
$ git rm dicname -r刪除dicname文件夾
$ git push origin master同步到遠程庫
$ git push origin master --force會使用本地分支的提交覆蓋遠端分支的提交,即如果他人在相同分支推送了新的提交,你的這一舉動將刪除他的提交
查看歷史記錄
-
git log可以查看當前項目的所有歷史提交(commit)記錄,即包含本人,也包含其他人的提交記錄 -
git log --all --graph --oneline以圖形化的形式查看當前項目的歷史提交記錄 -
git reflog查看當前項目本地操作記錄
將遠程倉庫中的代碼同步到本地
-
$ git fetch origin master獲取遠程倉庫的代碼到本地 -
$ git merge origin/master將遠程下載的代碼合并到本地倉庫
或者使用如下命令
git pull 當前分支自動與唯一一個追蹤分支進行合并
git pull 命令等同于上述 git fetch + git merge
備注: git pull 的完整格式如下
$ git pull <遠程庫名> <遠程分支名>:<本地分支名>
例如,獲取遠程倉庫的 branch_6.0 分支到本地的 nati_3.0 分支,可以使用如下命令
$ git pull origin branch_6.0:nati_3.0
刪除倉庫
-
$git remote rm reponame刪除遠程倉庫
實際操作顯示could not remove config section 'remote.reponame' -
于是使用第二種方法:
先刪除本地的文件夾
然后點擊github主頁-settings頁面-delete this repository按鈕刪除即可
主頁Settings選項
標簽
切換到需要打標簽的分支上,打標簽即可。默認標簽是打在最新提交的commit上
-
$git branch查看所有的分支 -
$git checkout master切換到master分支(主分支)上 -
$git tag v1.0為當前分支打上標簽,確定了打標簽時刻的版本。以后可以把那個打標簽的時刻的歷史版本取出來 -
$git tag查看當前所有標簽 -
$git push origin --tags將全部未推送的標簽推送到遠程
或者使用 -
$git push origin v1.02將標簽v1.02推送到遠程庫中
刪除標簽
-
$git tag -d v1.02刪除本地v1.02標簽 -
$git push origin :refs/tags/v1.02從遠程刪除v1.02標簽
如果標簽未推送到遠程庫,只要刪除本地標簽就可以,如果已經推送到遠程庫,則需要從遠程刪除標簽
撤銷修改
- 如果不小心改壞了一個工作區(qū)的文件時,想直接丟棄工作區(qū)的修改,可以使用
$ git checkout -- filename這時工作區(qū)的文件就恢復到了之前的狀態(tài) - 如果將一個改壞了的文件提交到了暫存區(qū),這個時候想刪除,可以使用
$ git reset HEAD filename這時暫存區(qū)就會舍棄上一次的add,回到add之前的狀態(tài) - 可以查看當前的狀態(tài)
$ git status
暫存代碼
-
git stash save "保存?zhèn)渥⑿畔?暫存 -
git stash pop stash@{1}回復暫存的進度,并將 stash 中對應的存儲刪除 -
git stash apply stash@{1}回復暫存的進度,不會刪除 stash 中對應的存儲 -
git stash clear清空 stash -
git stash drop移除 stash 列表中最新的一個存儲單元
不小心使用了 drop 或者 clear 命令,想要找回的解決方法
-
git fsck --unreachable顯示所有 unreachable 記錄,其中commit,將看到分支信息、stash時的備注信息、stash操作的時間點等
-
git show <sha>sha 為上面的 key -
git stash apply <sha>即可恢復
回滾代碼
當想要查看某次 commit 的代碼時,可以使用如下命令
-
$ git reset --hard commit_id退到/進到指定 commit 時的代碼
應用場景:撤銷上一次的 merge -
$ git reset --hard HEAD^回退到上個版本 -
$ git reset --hard HEAD~n回退到前 n 次提交之前,n 為多少,回退到 多少 次提交之前
分支
項目中為了開始一個新的思路,有時候需要新建一個分支
- 查看分支
$ git branch查看本地當前所有分支
$ git branch -a查看遠程所有分支 - 創(chuàng)建分支
git checkout -b dev新建dev分支并切換dev分支上
相當于以下兩條命令:
$ git branch dev
$ git checkout dev
此時可以在dev分支上正常add、commit、tag等操作。 - 合并分支
如果dev分支合并到master分支上,則需要如下步驟:
$ git checkout master切換到master分支上
$ git merge dev把dev分支的內容合并到master分支上 - 刪除分支
合并完分支后就可以將dev分支刪除掉了
$ git branch -d dev刪除dev分支 - 推送分支
$ git push origin dev就可以將dev分支推送到遠程庫中
如果給dev打了標簽,也可以將標簽推送到遠程庫中
$ git push origin -v1.02 - 從遠程庫中克隆dev分支
從遠程庫克隆時,默認只能克隆master分支,如果想要在dev分支上工作,就需要創(chuàng)建遠程庫dev分支的本地分支,因此需要用如下命令:
$ git checkout -b dev origin/dev
然后就可以在本地dev分支工作,并可以向遠程庫的dev分支commit和push了
忽略特殊文件
工作目錄中的某些如配置文件、編譯文件如.pyc文件沒必要上傳,通過編寫.gitignore文件忽略
方法一
github已經為我們準備了配置文件,可以直接訪問https://github.com/github/gitignore ,下載相應的文件即可。配置文件也需要通過下述命令添加到庫中。
git add
git commit
git push-
方法二
在web網站上創(chuàng)建遠程庫時,倒數第二行有選項,"Add .gitignore: None"選項,可以直接選擇相應的配置文件。在克隆遠程庫時,也會將相應的文件一起克隆到本地庫中。
Add .gitignore: None
這樣在推送的時候就會自動忽略.gitignore中設置的文件
注意: .gitignore文件在mac系統(tǒng)下默認為隱藏文件,可以通過下述命令查看文件夾中隱藏的文件
ls -a
忽略 git 已經跟蹤的某些文件
.gitignore 文件對已經追蹤的文件不起作用,因此想要忽略某些文件,需要執(zhí)行一下操作
-
git rm -r --cached .刪除 git 緩存,或者git rm -r --cached <文件名>在 git 版本庫中刪除某個跟蹤的文件 -
git add .重新添加文件到 git 暫存,此時,.gitignore 文件會起作用
忽略未被跟蹤的文件
某些未被跟蹤的文件更改后,使用 gst 命令后會出現如下提示
Untracked files:
(user "git add <file>..." to include in what will be committed)
此時,如果既不想跟蹤這些文件,也不想再出現同樣的提示,可以使用 git clean 命令刪除文件
-
git clean -n不會真的刪除文件,只是告知哪些文件會被刪除 -
git clean -f刪除當前目錄下沒被跟蹤的文件,但不會刪除 .gitignore 文件里指定的文件,盡管這些文件沒有被跟蹤 -
git clean -f <path>刪除指定路徑下的沒有被track過的文件 -
git clean -d連 untracked 的目錄也一起刪掉 -
git clean -xf刪除當前目錄下所有沒有track過的文件. 不管他是否是.gitignore文件里面指定的文件夾和文件
常用命令簡寫
| 簡寫 | 完整命令 | 備注 |
|---|---|---|
gst |
git status |
|
gup |
git pull --rebase |
|
ga |
git add |
備注:可以通過編輯 .gitconfig 文件增刪 git 簡寫命令


