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”的文件出皇,文件內(nèi)容如下
Host XXX.com
User xxx // 為你的郵箱前綴
Port XXX
IdentityFile ~/.ssh/id_rsa // 你的 ssh 私鑰文件名
- 如果要使用 Gerrit 管理代碼,需要在 Gerrit 添加證書
- 終端輸入如下命令
cat ~/.ssh/id_rsa.pub
哗戈,將顯示的公鑰復(fù)制到剪貼板上 - 登錄到 gerrit 到 settings/ssh-keys 頁
- 點擊 "Add Key"郊艘,粘貼剛才復(fù)制的公鑰
創(chuàng)建倉庫
1.從遠程庫克隆
- 登錄github-Create a new repository-輸入Repository name-勾選Initialize this repository with a README-點擊Create repository按鈕
-
點擊圖片一按鈕,復(fù)制https地址谱醇,在本地電腦命令行窗口中輸入
git clone https地址
圖片一 - 進入克隆的文件夾里可以看到有個一個README.md文件(README.md中內(nèi)容是github項目頁面中展示的內(nèi)容暇仲,使用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)控已經(jīng)被add過的文件,將修改提交到暫存區(qū)煮剧,但不會提交新的文件 -
git add -A
即(git add --all
)是上面兩個功能的合集
-
-
刪除文件
- 在工作區(qū)刪除文件
$ rm abc.txt
刪除文件(或者直接在文件管理器中把沒用的文件刪了) - 在版本庫中刪除文件斥滤,分兩步執(zhí)行
-
git rm abc.txt
刪除版本庫中的文件 -
git commit -m "刪除文件"
提交
-
- 刪錯了沒關(guān)系,因為版本庫里還有呢勉盅,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本
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標簽
如果標簽未推送到遠程庫老充,只要刪除本地標簽就可以,如果已經(jīng)推送到遠程庫螟左,則需要從遠程刪除標簽
撤銷修改
- 如果不小心改壞了一個工作區(qū)的文件時啡浊,想直接丟棄工作區(qū)的修改,可以使用
$ git checkout -- filename
這時工作區(qū)的文件就恢復(fù)到了之前的狀態(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}
回復(fù)暫存的進度奄妨,并將 stash 中對應(yīng)的存儲刪除 -
git stash apply stash@{1}
回復(fù)暫存的進度涂籽,不會刪除 stash 中對應(yīng)的存儲 -
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>
即可恢復(fù)
回滾代碼
當想要查看某次 commit 的代碼時景东,可以使用如下命令
-
$ git reset --hard commit_id
退到/進到指定 commit 時的代碼
應(yīng)用場景:撤銷上一次的 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分支的內(nèi)容合并到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已經(jīng)為我們準備了配置文件,可以直接訪問https://github.com/github/gitignore 因块,下載相應(yīng)的文件即可橘原。配置文件也需要通過下述命令添加到庫中。
git add
git commit
git push
-
方法二
在web網(wǎng)站上創(chuàng)建遠程庫時,倒數(shù)第二行有選項靠柑,"Add .gitignore: None"選項寨辩,可以直接選擇相應(yīng)的配置文件。在克隆遠程庫時歼冰,也會將相應(yīng)的文件一起克隆到本地庫中。
Add .gitignore: None
這樣在推送的時候就會自動忽略.gitignore中設(shè)置的文件
注意: .gitignore文件在mac系統(tǒng)下默認為隱藏文件耻警,可以通過下述命令查看文件夾中隱藏的文件
ls -a
忽略 git 已經(jīng)跟蹤的某些文件
.gitignore 文件對已經(jīng)追蹤的文件不起作用隔嫡,因此想要忽略某些文件,需要執(zhí)行一下操作
-
git rm -r --cached .
刪除 git 緩存甘穿,或者git rm -r --cached <文件名>
在 git 版本庫中刪除某個跟蹤的文件 -
git add .
重新添加文件到 git 暫存腮恩,此時,.gitignore 文件會起作用
忽略未被跟蹤的文件
某些未被跟蹤的文件更改后温兼,使用 gst
命令后會出現(xiàn)如下提示
Untracked files:
(user "git add <file>..." to include in what will be committed)
此時秸滴,如果既不想跟蹤這些文件,也不想再出現(xiàn)同樣的提示募判,可以使用 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 簡寫命令