Git開發(fā)必備指令

1、Linux基礎(chǔ)指令

cd .. //返回上級(jí)目錄
cd d: //進(jìn)入d盤
ls -al //查看文件列表
cat dome.txt //查看文件
touch dome.txt //創(chuàng)建文件
rm dome.txt //刪除文件
vim 文件名 //編輯文件

2晌该、git的基本概念

Workspace:工作區(qū)
Index / Stage:暫存區(qū)(緩存區(qū))
Repository:倉庫區(qū)(或本地倉庫)
Remote:遠(yuǎn)程倉庫

2.1 git 初始化

git的初始化有兩種,一種是還沒有倉庫自己新建骇两,使用git init 初始化倉庫;
一種是已經(jīng)有倉庫了姜盈,通過git clone 拉取倉庫到本地低千。

git init //當(dāng)前目錄下初始一個(gè)倉庫,多一個(gè).git的隱藏文件夾
git config --global user.name 'lisan' //配置本地倉庫用戶名
git config --global user.email 'lisan@email.com' //配置本地倉庫用戶郵件
或者
git clone <path> //克隆gitcode
git remote add [shortname] [url] //添加遠(yuǎn)程庫

例子:
克隆遠(yuǎn)程倉庫
 $ git clone git://github.com/schacon/grit.git
關(guān)聯(lián)遠(yuǎn)程倉庫
 $ git remote add origin https://github.com/user/repo.git

補(bǔ)充:config的幾種作用域
global 用戶權(quán)限
system 系統(tǒng)權(quán)限
local 當(dāng)前目錄權(quán)限

2.2贩据、git基礎(chǔ)指令-添加栋操、提交闸餐、查看、刪除矾芙、回退

a舍沙、添加

基本操作略...

git add read.md //添加文件到緩存區(qū)
git add . //該目錄下所有文件添加到緩存區(qū)
git add -a //項(xiàng)目內(nèi)全部文件添加到緩存區(qū)

b、提交

基本操作略...

git commit -m "mrak" //提交本地倉庫
git commit -am "mark" //提交本地倉庫剔宪、與上面不同的是我們可以少了git add操作(只限于已經(jīng)存在于緩存區(qū)的文件拂铡,也就是說如果你新建了個(gè)test文件,如果沒git add葱绒,這里不會(huì)提交到倉庫感帅,還是老老實(shí)實(shí)add后commit。)
git commit --amend //修改最后一次提交commit的msg

c地淀、查看

基本操作略...

git log -n 查看最近n次改動(dòng)(常用)
git log --oneline //簡潔記錄
git log --graph //圖形化顯示commit
git log --reverse --oneline //反向查看記錄
git log --oneline --graph //歷史中出現(xiàn)了分支失球、合并
git status //查看文件狀態(tài)(常用)
git status -s //查看狀態(tài) 簡潔模式

d、刪除

基本操作略...

git checkout read.md //回復(fù)工作區(qū)文件內(nèi)容到倉庫最新版本的文件內(nèi)容
git rm <file> //刪除工作區(qū)內(nèi)容
git rm <file> --cached //刪除緩存區(qū)內(nèi)容帮毁,工作區(qū)不受影響(比如.gitignore配置是我們可能會(huì)用到這個(gè)功能)

e实苞、退回版本

開發(fā)中難免會(huì)提交錯(cuò)commit、因此git為我們提供了撤銷commit的方法烈疚。
這里有個(gè)重點(diǎn)黔牵,沒錯(cuò)就是HEAD,在使用git中我們常常會(huì)看到HEAD爷肝,那么HEAD到底是什么呢猾浦?我們知道在git中可能會(huì)有很多branch和commit,為了知道我們當(dāng)前工作區(qū)提交到那個(gè)branch灯抛,所以需要個(gè)指針指向當(dāng)前指向的branch的commit金赦。HEAD可以簡單理解成這個(gè)指針。(實(shí)際牧愁,HEAD指向的是當(dāng)前分支素邪,在每個(gè)分支上都有一個(gè)指針指向最新的commit,而HEAD始終是指向當(dāng)前分支的指針猪半,所以可以簡單理解HEAD就是指針)


主分支上的指針和HEAD

git reset HEAD read.md //撤銷添加到緩存區(qū)的內(nèi)容
git reset HEAD^ //回退一個(gè)commit
git reset HEAD~3 //向上回退3個(gè)commit
git reset commit_id //回退指定版本
git reset 841125 //回到commit_id=841125的提交

git reset 841125 和 git HEAD~3得到的結(jié)果是一樣的
第一個(gè)方法讓git回退到841125的commit 也就是倒數(shù)第三個(gè)commit;
第二個(gè)方法讓指針(HEAD)回退3個(gè)節(jié)點(diǎn)(commit)偷线;
需要注意的是reset后面還可以跟 --hard磨确、--mixed、--soft等參數(shù)

--mixed 影響倉庫和暫存區(qū) (reset HEAD and index)(默認(rèn)值)
--soft 影響倉庫 (reset only HEAD)
--hard 影響倉庫声邦、暫存區(qū)和工作區(qū) (reset HEAD, index and working tree)
當(dāng)我們git reset后不跟參數(shù)乏奥、默認(rèn)是--mixed,也就是只對(duì)暫存區(qū)和倉庫進(jìn)行回退亥曹。

下面是最近三次的commit

commit 676249486735497db288f6654c7295d13125ec56 (HEAD -> master, origin/master, origin/HEAD)
    最新commit

commit 2d751a62100e2f5af58d35923c84d6f8bc98cd0b
    倒數(shù)第二commit

commit 841125dc92f4929fa0fe5622cff1f93af4bebf02
    倒數(shù)第三commit

git revert
生成一個(gè)新的提交來撤銷某次提交邓了,此次提交之前的所有提交都會(huì)被保留恨诱。

$ git revert <commit ID>

f、撤銷工作區(qū)中文件

撤銷單個(gè)文件修改骗炉,使用下面命令:

$ git checkout -- 文件名

撤銷所以文件修改照宝,使用下面命令:

$ git checkout .

2.4 本地分支

a、 查看分支

略略略...

git branch //查看分支
git remote -vv //查看遠(yuǎn)程分支
git branch -a //查看本地和遠(yuǎn)程分支(所有分支)
git branch -vv //查看本地分支關(guān)聯(lián)遠(yuǎn)程分支句葵,及最近的一次提交

b厕鹃、 創(chuàng)建、刪除乍丈、切換

略略略...

git branch <分支name> //創(chuàng)建分支
git branch -d <分支name> //刪除分支
git fetch -p //清理已經(jīng)被刪除的遠(yuǎn)程分支
git checkout <分支name> //切換分支
git checkout -b [分支名] [遠(yuǎn)程名]/[分支名] //切換并創(chuàng)建

3剂碴、 合并

每個(gè)需求新建一個(gè)分支開發(fā),能很好的解決多個(gè)需求在一個(gè)分支里造成的混亂轻专。
多人合作開發(fā)忆矛,創(chuàng)建分支開發(fā)真的是用了都說好。所以不可避免的我們需要合并自己的分支和同事的分支请垛。
合并分支如果沒有沖突催训,git里只是把指針指向了最新的commit。我們稱之為fast-forward叼屠。
如果有沖突瞳腌,這需要解決沖突,然后提交分支镜雨。

git merge <branch> //branch被合并到當(dāng)前分支
git rebase master <branch> # 將master rebase到branch

merge和rebase都是合并分支嫂侍,那么有什么區(qū)別呢?
主要區(qū)別在于荚坞,merge會(huì)保留分支的真實(shí)信息挑宠,而rebase會(huì)把分支上的commit融合到當(dāng)前分支上。
直接放鏈接颓影,解釋的很清楚
開發(fā)一般都用merge各淀,當(dāng)然你非要用rebase合并分支也可以。

2.5诡挂、 遠(yuǎn)程分支

終于到最最重要的部分了碎浇,沒有遠(yuǎn)程的git是么有靈魂的。

git pull # 抓取遠(yuǎn)程倉庫所有分支更新并合并到本地
git pull --no-ff # 抓取遠(yuǎn)程倉庫所有分支更新并合并到本地璃俗,不要快進(jìn)合并
git fetch origin # 抓取遠(yuǎn)程倉庫更新
git merge origin/master # 將遠(yuǎn)程主分支合并到本地當(dāng)前分支

git push # 推送所有分支 (這個(gè)后面默認(rèn)是 當(dāng)前的分支對(duì)應(yīng)的origin master)
git push origin master # 將本地主分支推到遠(yuǎn)程主分支
git push -u origin master # 將本地主分支推到遠(yuǎn)程(如無遠(yuǎn)程主分支則創(chuàng)建奴璃,用于初始化遠(yuǎn)程倉庫)
git push origin <local_branch> # 創(chuàng)建遠(yuǎn)程分支, origin是遠(yuǎn)程倉庫名
git push origin <local_branch>:<remote_branch> # 創(chuàng)建遠(yuǎn)程分支
git push origin :<remote_branch> #先刪除本地分支(git br -d <branch>)城豁,然后再push刪除遠(yuǎn)程分支

git pull實(shí)際上有兩個(gè)步驟苟穆,拉取遠(yuǎn)程倉庫和合并拉取的內(nèi)容,等同于,git fetch origin(拉撒谩) + git merge brName(合并)

如果遠(yuǎn)程倉庫創(chuàng)建了分支a跟磨,但是我們本地還沒有分支a,所以我們先本地創(chuàng)建分支a攒盈,但是git push時(shí)你會(huì)發(fā)現(xiàn)抵拘,我們沒有關(guān)聯(lián)到遠(yuǎn)程分支無法推送,只是我么要用到git branch -u origin a這個(gè)方法本地分支a關(guān)聯(lián)到遠(yuǎn)程分支a沦童,之后我們就可以推送了仑濒。關(guān)聯(lián)遠(yuǎn)程分支前別忘了先git pull,為啥偷遗?遠(yuǎn)程雖然新建了分支a墩瞳,但是我們本地還不知道,所以需要git pull 獲取遠(yuǎn)程的狀態(tài)氏豌『碜茫可能有些亂,下面分解下1.git pull 獲取遠(yuǎn)程信息 2. git checkout -b a 本地創(chuàng)建分支b 3. git branch -u origin a 關(guān)聯(lián)遠(yuǎn)程分支a 4.git push 推送成功

一般情況下泵喘,我們提交到遠(yuǎn)程倉庫泪电,只需要git push即可,但是有時(shí)可能出現(xiàn)下面這種情況本地分支a關(guān)聯(lián)的是遠(yuǎn)程分支b纪铺,雖然很很少見相速。這時(shí)如果在使用git push會(huì)推送失敗,我需要完整的寫出git push origin b進(jìn)行推送鲜锚。

4突诬、 標(biāo)簽tag

用于對(duì)發(fā)布版本進(jìn)行標(biāo)記,這是最常見的應(yīng)用場景芜繁。

git tag -a v1.0 添加標(biāo)簽
git checkout tagname 切換到 tag code
git log --oneline --decorate --graph 可以查看標(biāo)簽

5旺隙、查看文件diff

實(shí)際開發(fā)中,我基本沒有用這個(gè)命令骏令,還是在AS對(duì)比文件蔬捷、解決沖突舒服。榔袋。周拐。

git diff 比較工作區(qū)和暫存區(qū)的文件差異
git diff HEAD 比較工作區(qū)和倉庫的文件差異
git diff --cached 比較倉庫和暫存區(qū)之間的差異git diff <file> # 比較當(dāng)前文件和暫存區(qū)文件差異

git diff --stat # 僅僅比較統(tǒng)計(jì)信息
git diff <branch1>..<branch2> # 在兩個(gè)分支之間比較
git diff <id1><id2> # 比較兩次提交之間的差異

5、保存到隱藏區(qū)(常用)

應(yīng)用場景凰兑,假如在develop分支上我們正在開發(fā)分支速妖,這是突然有個(gè)bug需要我們修復(fù),但是我們又不能在develop分支上直接修改聪黎,這時(shí)需要我們切換到需要修復(fù)bug的那個(gè)分支上修復(fù)bug,假設(shè)這個(gè)分支是a。

git stash 保存當(dāng)前修改到stash中
git stash save “message” 保存帶msg的當(dāng)前修改到stash中
git stash list 查看stash中存儲(chǔ)的列表
git stash pop 從stash中提取出最新的保存到當(dāng)前分支
git stash pop stash@{1} 從stash中提取標(biāo)記為@{1}的修改到本地
git stash apply 回復(fù)工作區(qū)不刪除stash內(nèi)容稿饰,與pop不同的是不會(huì)刪除stash區(qū)的內(nèi)容
git stash drop stash@{0} 刪除stash內(nèi)容(通常和apply配合使用)

6锦秒、 其他

應(yīng)用場景:分支b中的一個(gè)commit_id=5689k的commit,分支a中沒有這個(gè)id為5689k的commit喉镰,如果分支a需要這個(gè)commit的內(nèi)容旅择,如果一個(gè)一個(gè)復(fù)制也不失是一種辦法,但是這樣實(shí)在是有些低效率侣姆,所以git為我們提供了快捷的方法生真。
git cherry-pick commit_id
在分支a上 git cherry-pick 5689k 即可把5689k的commit內(nèi)容合并到a分支上路了。

git使用小技巧

$ git checkout - 快速切換到上一個(gè)分支
$ git config --global alias.co checkout //設(shè)置別名
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

開發(fā)中用的命令基本總結(jié)完了捺宗,可能會(huì)有遺漏想起里會(huì)補(bǔ)充的柱蟀,有什么錯(cuò)誤歡迎大家指出。(* ̄︶ ̄)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚜厉,一起剝皮案震驚了整個(gè)濱河市长已,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昼牛,老刑警劉巖术瓮,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贰健,居然都是意外死亡胞四,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門伶椿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辜伟,“玉大人,你說我怎么就攤上這事悬垃∮沃纾” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵尝蠕,是天一觀的道長烘豌。 經(jīng)常有香客問我,道長看彼,這世上最難降的妖魔是什么廊佩? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮靖榕,結(jié)果婚禮上标锄,老公的妹妹穿的比我還像新娘。我一直安慰自己茁计,他們只是感情好料皇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般践剂。 火紅的嫁衣襯著肌膚如雪鬼譬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天逊脯,我揣著相機(jī)與錄音优质,去河邊找鬼。 笑死军洼,一個(gè)胖子當(dāng)著我的面吹牛巩螃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匕争,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼避乏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了汗捡?” 一聲冷哼從身側(cè)響起淑际,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扇住,沒想到半個(gè)月后春缕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡艘蹋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年锄贼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片女阀。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宅荤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浸策,到底是詐尸還是另有隱情冯键,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布庸汗,位于F島的核電站惫确,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蚯舱。R本人自食惡果不足惜改化,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枉昏。 院中可真熱鬧陈肛,春花似錦、人聲如沸兄裂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至前翎,卻和暖如春稚配,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背港华。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留午衰,地道東北人立宜。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像臊岸,于是被迫代替她去往敵國和親橙数。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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