Git常用操作匯總

(一)help查看函數(shù)manual

git help 函數(shù)名

(二)圖解Git命令—方便理解記憶

圖1 圖解Git


圖2 Git命令與工作區(qū)歌懒、暫存區(qū)(index)和倉(cāng)庫(kù)(master)的關(guān)系

(二 )撤銷(xiāo)最后一條commit(s)

問(wèn)題描述:I committed the wrong files to Git.How can I undo that commit?

$ git commit -m "Something terribly misguided" (1)

$ git reset HEAD~ (2)

# <edit files as necessary> (3)

$ git add ... (4)

$ git commit -c ORIG_HEAD (5)

(三)放棄暫存區(qū)改變(unstaged changes)

         圖1 Unstaged changes               ±沧馈(http://stackoverflow.com/questions/10954329/whats-the-unstaged-changes-in-github)

問(wèn)題描述:How do I discard changes in my workingcopy that are not in the index?

For a specific file use:

$git checkout path/to/file/to/revert

For all unstaged files use:

$git checkout -- .(注意末尾的'.')

(四)commit前撤銷(xiāo)git? add修改

問(wèn)題描述:mistakenly added files using the command:git add myfile.txt. I have not yet run git commit. Is there a way to undo this, so these files won't be included in the commit?

$ git config --global alias.unadd 'reset HEAD --'

$ git rm -r --cached .? # -r參數(shù)代表遞歸

(五)git diff 和 git diff --cached 、git diff HEAD的比較

$ git diff? ? # 是工作區(qū)(work directory)和暫存區(qū)(stage)的比較

$ git diff --cached? ? # 是暫存區(qū)(stage)和倉(cāng)庫(kù)|分支(master)的比較

$ git diff HEAD # 可以查看工作區(qū)和版本庫(kù)(master)的差別

(六)git revert和git reset的區(qū)別?

git revert 也是撤銷(xiāo)命令及皂,區(qū)別在于reset是指向原地或者向前移動(dòng)指針甫男,git revert是創(chuàng)建一個(gè)commit來(lái)覆蓋當(dāng)前的commit,指針向后移動(dòng)验烧。

git revert 是撤銷(xiāo)某次操作查剖,此次操作之前的commit都會(huì)被保留,而git reset 是撤銷(xiāo)某次提交噪窘,但是此次之后的修改都會(huì)被退回到暫存區(qū)中笋庄。

具體一個(gè)例子效扫,假設(shè)有三個(gè)commit(commit1,commit2,commit3),使用 git status:

commit3: add test3.c

commit2: add test2.c

commit1: add test1.c

當(dāng)執(zhí)行g(shù)it revert HEAD~1時(shí)(撤銷(xiāo)倒數(shù)第二個(gè)操作)直砂,第二個(gè)操作即commit2這個(gè)操作被撤銷(xiāo)了菌仁,使用git log可以看到:

commit1:add test1.c

commit3:add test3.c

由于git revert不會(huì)回退到暫存區(qū)中,所以使用git status 沒(méi)有任何變化

如果換做執(zhí)行g(shù)it reset --soft(默認(rèn)) HEAD~1后静暂,運(yùn)行g(shù)it log可以看到

commit2: add test2.c

commit1: add test1.c

運(yùn)行g(shù)it status济丘,可以看到test3.c處于暫存區(qū)了,準(zhǔn)備提交洽蛀。

但如果換做執(zhí)行g(shù)it revert后摹迷,

顯示:HEAD is now at commit2,運(yùn)行g(shù)it log可以看到

commit2: add test2.c

commit1: add test1.c

運(yùn)行g(shù)it status郊供, 則沒(méi)有任何變化

所以峡碉,git revert與git reset最大的不同是,git revert 僅僅是撤銷(xiāo)某次提交驮审,而git reset會(huì)將撤銷(xiāo)點(diǎn)之后的操作

都回退到暫存區(qū)中鲫寄。

(七)git rm --cached <file>和git reset -- <file>區(qū)別


(七)git rm與git rm --cached

?????? 當(dāng)我們需要?jiǎng)h除暫存區(qū)(index)或分支(master)上的文件, 同時(shí)工作區(qū)也不需要這個(gè)文件了, 可以使用:

$ git rm “文件路徑”

?????? 當(dāng)我們需要?jiǎng)h除暫存區(qū)或分支上的文件, 但本地又需要使用, 只是不希望這個(gè)文件被版本控制, 可以使用:

$ git rm --cached “文件路徑”

(八)git status簡(jiǎn)介

?????? git status命令可以列出當(dāng)前目錄所有還沒(méi)有被git管理的文件和被git管理且被修改但還未提交(git commit)的文件。

結(jié)果解讀:

"Changes to be committed"中所列的內(nèi)容是在Index中的內(nèi)容疯淫,commit之后進(jìn)入Git Directory地来。

“Changed but not updated”中所列的內(nèi)容是在Working Directory中的內(nèi)容,add之后將進(jìn)入Index熙掺。

“Untracked files”中所列的內(nèi)容是尚未被Git跟蹤的內(nèi)容未斑,add之后進(jìn)入Index。

(九)歷史版本恢復(fù)

$ git log # 查看最近的提交的歷史版 (1)

$ git reset --hard HEAD^ # ^上一個(gè)版本币绩,^^上上一個(gè)版本颂碧,多的話用HEAD~10? (2)
$ git reflog # 如果reset(恢復(fù))到某個(gè)歷史版本后,這個(gè)版本之前的狀態(tài)就會(huì)查詢(xún)不出來(lái)(具體解釋見(jiàn)六)类浪。為了還可以恢復(fù)到未來(lái)某個(gè)版本载城,我們需要查詢(xún)最近所做的操作,可以通過(guò)git reflog 命令费就,得到commit_id之后再通過(guò)git reset --hard HEAD commit_id命令來(lái)達(dá)到效果(3)

(十)創(chuàng)建和切換分支?

$ git checkout -b "分支名" # 新建分支并切換到新分支(1)=(2)+(3)

$ git checkout "分支名" # 切換分支(2)

$ create a new brache "分支名" # 創(chuàng)建新分支(3)

$ git brach -d "分支名" # 刪除分支

$ git merge "分支名" # 表示將指定分支合并到當(dāng)前所在分支诉瓦,一定要理解這句話不然會(huì)合并分支錯(cuò)誤。



參考資料推薦:Git參考手冊(cè)?力细、Git睬澡、圖解GitGit教程?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末眠蚂,一起剝皮案震驚了整個(gè)濱河市煞聪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逝慧,老刑警劉巖昔脯,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啄糙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡云稚,警方通過(guò)查閱死者的電腦和手機(jī)隧饼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)静陈,“玉大人燕雁,你說(shuō)我怎么就攤上這事【ㄓ担” “怎么了拐格?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)刑赶。 經(jīng)常有香客問(wèn)我捏浊,道長(zhǎng),這世上最難降的妖魔是什么角撞? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任呛伴,我火速辦了婚禮勃痴,結(jié)果婚禮上谒所,老公的妹妹穿的比我還像新娘。我一直安慰自己沛申,他們只是感情好劣领,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著铁材,像睡著了一般尖淘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上著觉,一...
    開(kāi)封第一講書(shū)人閱讀 51,215評(píng)論 1 299
  • 那天村生,我揣著相機(jī)與錄音,去河邊找鬼饼丘。 笑死趁桃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肄鸽。 我是一名探鬼主播卫病,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼典徘!你這毒婦竟也來(lái)了蟀苛?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逮诲,失蹤者是張志新(化名)和其女友劉穎帜平,沒(méi)想到半個(gè)月后幽告,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡罕模,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年评腺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淑掌。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒿讥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抛腕,到底是詐尸還是另有隱情芋绸,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布担敌,位于F島的核電站摔敛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏全封。R本人自食惡果不足惜马昙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刹悴。 院中可真熱鬧行楞,春花似錦、人聲如沸土匀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)就轧。三九已至证杭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妒御,已是汗流浹背解愤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乎莉,地道東北人送讲。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像梦鉴,于是被迫代替她去往敵國(guó)和親李茫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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