【Git】使用總結(jié)

特有名詞解釋

DETACHED HEAD

HEAD normally refers to a named branch (e.g. master). Meanwhile, each branch refers to a specific commit.

HEAD 通常指的是一個(gè)已被命名的分支(如master).但同時(shí)每一個(gè)分支可以指向一個(gè)具體的提交秤茅。DETACHED HEAD 意味著HEAD游標(biāo)指向一個(gè)具體的commit而非某個(gè)被命名的分支肢藐。(it means simply that HEAD refers to a specific commit, as opposed to referring to a named branch. )

在這種狀態(tài)下槽驶,一般會(huì)出現(xiàn)這個(gè)問題:Your branch and 'origin/master' have diverged 需要如下新建分支合并分支的方法解決:

git branch my-temporary-work
git checkout master
git merge my-temporary-work

為什么要設(shè)立一個(gè)暫存區(qū)的概念

工作區(qū)茬斧、版本庫攒盈、暫存區(qū)原理圖

便于小步提交。比如你本地改到一半箫津,有個(gè)緊急的 bug 需要修復(fù)。你不想將改到一半的東西 commit 進(jìn)去拨拓。所以先 stash 一下,改掉 bug 并 commit氓栈,然后 stash pop 出來繼續(xù)沒完成的工作渣磷。
小步提交對(duì)于維護(hù)大型項(xiàng)目很有意義,方便跟蹤每一步發(fā)生了什么追蹤問題授瘦。

代碼比對(duì)

git diff

僅僅是比較 unstaged 的代碼和 staged 的代碼的區(qū)別醋界。untracked 的代碼必須先 track.

提交文件

git commit

-a 參數(shù)只對(duì)修改或刪除的文件會(huì)自動(dòng)加到暫存區(qū),對(duì)新增文件(untracked)文件無效
-v (--verbose)推薦使用 -v 代替 -m 因?yàn)檫@樣可以更好地書寫多行 commit message
--amend 修改上一次的 commit message提完。注意如果是上一次修改已經(jīng)提交形纺,可能會(huì)出現(xiàn) Your branch and 'origin/master' have diverged 的問題。

刪除未監(jiān)視文件 (untracked files)

建議加上 -n 參數(shù)(表示 dry-run)不直接刪這些文件而是來先看看會(huì)刪掉哪些徒欣,防止重要文件被誤刪逐样。
git clean -nf 刪除 untracked files
git clean -nfd 連 untracked 的目錄也一起刪掉

用于保存和恢復(fù)工作進(jìn)度

git stash

意義: Stash(隱藏) the changes in a dirty working directory away
stash是臨時(shí)保存文件修改內(nèi)容的區(qū)域。stash可以暫時(shí)保存工作樹和索引里還沒提交的修改內(nèi)容打肝,您可以事后再取出暫存的修改脂新。
注意:stash 的信息為各個(gè)分支公用,以棧數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)信息闯睹。
git stash save "message..." 保存工作進(jìn)度 (簡寫版:git stash)
git stash list 顯示進(jìn)度列表
git stash pop (stash@{0}) 參數(shù)表示第幾個(gè)存儲(chǔ)的狀態(tài)
git stash drop 刪除最后一個(gè)存儲(chǔ)狀態(tài)戏羽,在遇到 stash merge 沖突時(shí)經(jīng)常使用(一般先解決合并沖突担神,然后 git stash drop )
git stash clear 清空
操作流程:保存工作進(jìn)度→完善緊急的修改→stash pop繼續(xù)之前沒完成的工作
[stash 儲(chǔ)藏](https://git-scm.com/book/zh/v1/Git-%E5%B7%A5%E5%85%B7-%E5%82%A8%E8%97%8F%EF%BC%88Stashing%EF%BC%89

回退回滾

git reset——針對(duì)本地倉庫的文件的撤銷

git reset 是變更某分支 HEAD 游標(biāo)位置的命令楼吃。
git reset <文件所在路徑>將 staged 狀態(tài)的文件變?yōu)?unstaged 狀態(tài)。
git reset --hard HEAD~2 將 HEAD 游標(biāo)回退兩個(gè)版本妄讯。
git reset --hard <commitID>:將當(dāng)前分支重置為指定版本孩锡。(提交版本號(hào)commitID通過git log查看)。應(yīng)用場(chǎng)景:當(dāng)你解決完沖突亥贸,并且在合并完成后發(fā)現(xiàn)一個(gè)錯(cuò)誤躬窜,你仍然還是有機(jī)會(huì)來簡單地撤銷它。你只須要鍵入 “git reset --hard ” 命令

git reset常見的三種模式:soft炕置、mixed荣挨、hard(不同的影響范圍)

git revert——針對(duì)遠(yuǎn)程倉庫 commit 的撤銷

git revert 用于撤銷已存在的 commit ,并且會(huì)創(chuàng)建一個(gè)新的提交朴摊,是一種安全的做法默垄。

reset VS revert

reset 是在正常的 commit 歷史中,刪除了指定的 commit 甚纲,這時(shí) HEAD 是向后移動(dòng)了口锭。而 git revert 不會(huì)改變現(xiàn)在的提交歷史,它是在正常的 commit 歷史中再 commit 一次介杆,他的 HEAD 是一直向前的鹃操。
因此韭寸,git revert 可以用在公共分支上,git reset 應(yīng)該用在私有分支上荆隘。你也可以把 git revert 當(dāng)作撤銷已經(jīng)提交的更改恩伺,而 git reset HEAD 用來撤銷沒有提交的更改。

分支管理

git branch

  • git branch 查看當(dāng)前 checkout 過哪些遠(yuǎn)程分支椰拒,并且會(huì)標(biāo)明當(dāng)前所在分支莫其。
  • git branch -v 除以上功能外還會(huì)顯示分支的最后提交記錄。
  • git branch --remote 查看遠(yuǎn)程庫有那些分支
  • git branch <分支名> 創(chuàng)建某分支耸三。和git checkout -b區(qū)別在于不切換到該分支乱陡。
  • git branch -d <分支名> 刪除某分支(必須保證目前不處于該分支)(注意這一步僅僅是刪除本地分支,遠(yuǎn)程分支刪除還得用 git push)
  • git branch -m <old-branch> <new-branch> 重命名分支(變更分支名)

git checkout

  • git checkout -f 目標(biāo)文件(夾)所在目錄 強(qiáng)行覆蓋本地的文件(夾)
    ①若修改后仍未放到緩存區(qū)仪壮,則恢復(fù)到上一次git commit的狀態(tài)憨颠。
    ②若添加到緩存區(qū)后又做了修改,恢復(fù)到上一次git add的狀態(tài)积锅。
  • git checkout -b <分支名> 創(chuàng)建并切換到該分支爽彤,等價(jià)于git branch <分支名> + git checkout <分支名>。

tag管理

git push origin --tags把本地版本推送到了遠(yuǎn)程代碼倉庫
如果剛剛同步上去,你缺發(fā)現(xiàn)一個(gè)致命bug ,需要重新打版本
git tag -d <某個(gè)具體版本號(hào)缚陷,如V1.2>
這一步只是刪除了本地 V1.2的版本,可是線上V1.2的版本還是存在
這時(shí)我們可以推送的空的同名版本到線下,達(dá)到刪除線上版本的目標(biāo):
git push origin :refs/tags/V1.2

配置設(shè)置

git config

git對(duì)大小寫敏感
git 默認(rèn)對(duì)文件名大小寫不敏感 (不區(qū)分文件名大小寫)
git config core.ignorecase false

為指定命令配置一個(gè)別名适篙,可快速輸入命令。
git config --global alias.命令別名 命令
例如
git config --global alias.st status
:使用git st代替git status

查看公鑰

cat ~/.ssh/id_rsa.pub箫爷,注意查看是否有空格之類的嚷节,否則公鑰不正確。

遠(yuǎn)程倉庫操作

如何將一個(gè)已存在的目錄轉(zhuǎn)換為一個(gè) GIT 項(xiàng)目并托管到 GITHUB 倉庫?
http://leonshi.com/2016/02/01/add-existing-project-to-github/

git remote

查看全部遠(yuǎn)程倉庫詳細(xì)地址:
git remote -v
查看當(dāng)前遠(yuǎn)程倉庫地址:git remote -v(這個(gè)在不確定當(dāng)前是fork的代碼還是人家的代碼時(shí)很有效)

對(duì)遠(yuǎn)程倉庫進(jìn)行操作:
git remote add <遠(yuǎn)程倉庫名> <遠(yuǎn)程倉庫地址> 多人協(xié)作開發(fā)虎锚,需要相互添加遠(yuǎn)程倉庫硫痰。(這個(gè)具體怎么運(yùn)作去實(shí)際單位實(shí)踐一下應(yīng)該就知道了)
git remote rm <遠(yuǎn)程倉庫名>當(dāng)某個(gè)開發(fā)者不再貢獻(xiàn)代碼的時(shí)候就可以刪除他對(duì)應(yīng)的遠(yuǎn)程倉庫了。

刪除遠(yuǎn)程倉庫的分支:git push origin --delete develop1(刪除遠(yuǎn)程倉庫origin的develop1分支窜护,等價(jià)于git push origin :develop1

git pull

git pull = git fetch + merge to local(有時(shí)候git pull會(huì)出現(xiàn)落后于遠(yuǎn)程倉庫的問題效斑,所以先fetch)

提交日志

git log

按照時(shí)間順序顯示所在分支的提交日志git log -g(這是為了避免代碼回滾帶來的影響。不加-g的提交日志和遠(yuǎn)程倉庫的commit信息是保持一致的柱徙。但是如果有代碼回滾操作缓屠,回滾位置之前的commit logs信息就看不到了)
查看提交日志git log --pretty=oneline(整潔版本)

解決沖突

git merge

git merge master feature 將master分支合并到feature分支 等價(jià)于

git checkout feature  //切換到feature分支
git merge master // 將master分支合并進(jìn)feature分支

git merge --abort僅僅在合并后導(dǎo)致沖突時(shí)才使用。將會(huì)拋棄合并過程并且嘗試重建合并前的狀態(tài)护侮。

其他

利用gitmoji-cli 來提交帶有 emoji 的commit
gitmoji -i Initialize gitmoji as a commit hook敌完,這樣每次 commit 會(huì)自動(dòng)打開
gitmoji 提示
gitmoji -r Remove a previously initialized commit hook
gitmoji -c 交互式提交

git pgp簽署工作

必須首先安裝gpg(GnuPG)(一般用 HomeBrew )
gpg --gen-key 先生成自己的密鑰
生成密鑰的時(shí)候還遇到問題,后來依靠其中的 Thumb 解決概行。

pgp 簽署工作
參考:http://www.ruanyifeng.com/blog/2013/07/gpg.html

疑惑

git pull --rebase做了什么蠢挡?我的detached HEAD狀態(tài)解除了

參考文獻(xiàn)

Git遠(yuǎn)程操作詳解(有幅圖片很棒)
https://github.com/geeeeeeeeek/git-recipes/wiki/
http://www.worldhello.net/gotgit/index.html
bitbucket git教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子业踏,更是在濱河造成了極大的恐慌禽炬,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勤家,死亡現(xiàn)場(chǎng)離奇詭異腹尖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)伐脖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門热幔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讼庇,你說我怎么就攤上這事绎巨。” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長狰贯。 經(jīng)常有香客問我,道長和媳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任哈街,我火速辦了婚禮留瞳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骚秦。我一直安慰自己她倘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布骤竹。 她就那樣靜靜地躺著帝牡,像睡著了一般往毡。 火紅的嫁衣襯著肌膚如雪蒙揣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天开瞭,我揣著相機(jī)與錄音懒震,去河邊找鬼。 笑死嗤详,一個(gè)胖子當(dāng)著我的面吹牛个扰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葱色,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼递宅,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起办龄,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤烘绽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后俐填,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體安接,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年英融,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盏檐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驶悟,死狀恐怖胡野,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痕鳍,我是刑警寧澤给涕,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站额获,受9級(jí)特大地震影響够庙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抄邀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一耘眨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧境肾,春花似錦剔难、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至环鲤,卻和暖如春纯趋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冷离。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國打工吵冒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人西剥。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓痹栖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瞭空。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揪阿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350