Git 教程

Mac 環(huán)境配置

  1. 配置用戶名
git config --global user.name "郵箱前綴"
git config --global user.email "xxx@xx.com"

注意:如果是修改郵箱掀潮,還需要git commit --amend --reset-author,然后才能 git push

  1. ssh 密鑰生成
    生成 ssh-key琼富。終端命令如下
ssh-keygen -t rsa -b 1024
  • -t rsa 表示使用 RSA 算法
  • -b 指定密鑰長度
  • 輸入上述命令后仪吧,終端會詢問生成的文件名,可直接回車鍵鞠眉,保持默認不變
  • 當詢問 passphrase 時薯鼠,可直接回車鍵,表示不需要輸入密碼械蹋。
    這之后會得到兩個文件:id_rsa(私鑰文件) 和 id_rsa.pub(公鑰文件)
  1. 配置 ssh
    在 .ssh 文件夾中新建一個名為“config”的文件出皇,文件內(nèi)容如下
Host XXX.com
    User xxx   // 為你的郵箱前綴
    Port XXX
    IdentityFile ~/.ssh/id_rsa  // 你的 ssh 私鑰文件名
  1. 如果要使用 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í)行
      1. git rm abc.txt刪除版本庫中的文件
      2. git commit -m "刪除文件" 提交
    • 刪錯了沒關(guān)系,因為版本庫里還有呢勉盅,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本
      git checkout -- abc.txt其實就是用版本庫中的文件替換工作區(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 命令,想要找回的解決方法
  1. git fsck --unreachable 顯示所有 unreachable 記錄砸抛,其中

    commit评雌,將看到分支信息、stash時的備注信息直焙、stash操作的時間點等

  2. git show <sha> sha 為上面的 key
  3. 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í)行一下操作

  1. git rm -r --cached . 刪除 git 緩存甘穿,或者 git rm -r --cached <文件名> 在 git 版本庫中刪除某個跟蹤的文件
  2. 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 簡寫命令

參考

  1. GitHub教程
  2. git pull命令
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末释液,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子装处,更是在濱河造成了極大的恐慌误债,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妄迁,死亡現(xiàn)場離奇詭異寝蹈,居然都是意外死亡,警方通過查閱死者的電腦和手機登淘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門箫老,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人形帮,你說我怎么就攤上這事槽惫。” “怎么了辩撑?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵界斜,是天一觀的道長。 經(jīng)常有香客問我合冀,道長各薇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮峭判,結(jié)果婚禮上开缎,老公的妹妹穿的比我還像新娘。我一直安慰自己林螃,他們只是感情好奕删,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疗认,像睡著了一般完残。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上横漏,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天谨设,我揣著相機與錄音,去河邊找鬼缎浇。 笑死扎拣,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的素跺。 我是一名探鬼主播二蓝,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亡笑!你這毒婦竟也來了侣夷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤仑乌,失蹤者是張志新(化名)和其女友劉穎百拓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晰甚,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡衙传,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了厕九。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓖捶。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扁远,靈堂內(nèi)的尸體忽然破棺而出俊鱼,到底是詐尸還是另有隱情,我是刑警寧澤畅买,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布并闲,位于F島的核電站谷羞,受9級特大地震影響帝火,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一犀填、第九天 我趴在偏房一處隱蔽的房頂上張望蠢壹。 院中可真熱鬧,春花似錦九巡、人聲如沸图贸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽求妹。三九已至,卻和暖如春佳窑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背父能。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工神凑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人何吝。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓溉委,卻偏偏與公主長得像,于是被迫代替她去往敵國和親爱榕。 傳聞我的和親對象是個殘疾皇子瓣喊,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容