Git基礎(chǔ)命令拾荒

Git是什么蹬耘?

Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)(沒有之一)。

  • 與傳統(tǒng)cvs阐滩,svn區(qū)別
  1. 每一個(gè)開發(fā)人員的電腦上都有一個(gè)Local Repository,所以即使沒有網(wǎng)絡(luò)也一樣可以Commit巧娱,查看歷史版本記錄拒课,創(chuàng)建項(xiàng) 目分支等操作,等網(wǎng)絡(luò)再次連接上Push到Server端羡儿。
  2. Git把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ)礼患,而SVN是按文件。
  3. Git沒有一個(gè)全局版本號(hào)掠归,而SVN有:目前為止這是跟SVN相比Git缺少的最大的一個(gè)特征缅叠。
  4. SVN必須先Update才能Commit,可以看到所有的Log拂到。
  5. 強(qiáng)大的分支管理痪署。
創(chuàng)建一個(gè)倉庫(版本庫)
// 創(chuàng)建一個(gè)倉庫
wanss-MacBook-Pro:gittest wans$ git init
// 創(chuàng)建一個(gè)本地倉庫,裸倉庫
wanss-MacBook-Pro:gittest wans$ git --git-dir=lib1.git init --bare

// 獲取一個(gè)遠(yuǎn)程git庫
wanss-MacBook-Pro:gittest wans$ git clone http://...git

裸倉庫,只保存git歷史提交的版本信息兄旬,而不允許用戶在上面進(jìn)行各種git操作
這個(gè)就是最好把遠(yuǎn)端倉庫初始化成bare倉庫的原因狼犯。

// 添加一個(gè)README.md文件
wanss-MacBook-Pro:lib2 wans$ echo "hello git" > README.md
// 將README.md添加到暫存區(qū),等待提交
wanss-MacBook-Pro:lib2 wans$ git add README.md
// 將暫存區(qū)內(nèi)容提交到版本庫
wanss-MacBook-Pro:lib2 wans$ git commit -m "hello git"
  • 工作區(qū)與版本庫
  1. 工作區(qū):項(xiàng)目的目錄
  2. 版本庫:工作區(qū)有一個(gè)隱藏目錄.git目錄
  3. 暫存區(qū):稱為stage(或者叫index)领铐,保存版本庫中所有通過git add命令添加的修改悯森,可提交狀態(tài)。
示意圖
管理修改

1.修改README.md文件后

wanss-MacBook-Pro:lib2 wans$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

2.添加修改到已暫存狀態(tài)

wanss-MacBook-Pro:lib2 wans$ git add README.md
wanss-MacBook-Pro:lib2 wans$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   README.md

3.提交修改

wanss-MacBook-Pro:lib2 wans$ git commit -m "modified README.md"
wanss-MacBook-Pro:lib2 wans$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean

4.提交到遠(yuǎn)程分支

wanss-MacBook-Pro:lib2 wans$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 247 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/wans/Documents/gittest/home2/../lib2.git/
   6225363..03f2080  master -> master
wanss-MacBook-Pro:lib2 wans$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
wanss-MacBook-Pro:lib2 wans$
撤銷修改

根據(jù)工作區(qū)/暫存區(qū)/版本庫的狀態(tài)跳轉(zhuǎn)圖:

示意圖

補(bǔ)充: 從staged >> unstracked: git rm --cached file

  1. git revert 撤銷 某次操作绪撵,此次操作之前和之后的commit和history都會(huì)保留瓢姻,并且把這次撤銷。
  2. git reset –mixed 默認(rèn)方式音诈,不帶任何參數(shù)的git reset,只保留源碼幻碱,回退commit和index 信息。
  3. git reset –soft 回退到某個(gè)版本细溅,只回退了commit褥傍,不會(huì)恢復(fù)index file一級(jí),如果需要提交直接commit就好喇聊。
  4. git reset –hard 回退到某個(gè)版本恍风,文件全部回退到當(dāng)前版本,不可恢復(fù)。

反撤銷:git reflow;git reset —hard commitcode;

分支操作
// 創(chuàng)建新分支
git branch dev
// 切換到新分支
git checkout dev
// 創(chuàng)建新分支并切換到新分支
git checkout -b dev
// 放棄當(dāng)前分支修改切換到新分支
git checkout -f dev
// 查看所有分支
git branch -a

// 刪除分支名
git branch -d dev

// 更新遠(yuǎn)程已刪除分支
git fetch -p
// 更新遠(yuǎn)程新分支
git fetch
// 查看本地分支對(duì)應(yīng)的遠(yuǎn)程分支關(guān)系
git branch -vv

// 獲取遠(yuǎn)程分支
git checkout -b dev origin/dev
對(duì)比與合并
// 將指定分支的修改合入當(dāng)前分支
git merge dev
// 解決沖突
git mergetool file
// 選擇另一分支提交記錄合并到當(dāng)前分支
git cherry-pick commitcode

// 查看尚未暫存的文件的修改
git diff
// 查看已經(jīng)暫存起來的文件(staged)和上次提交時(shí)的快照之間(HEAD)的差異
git diff --cached
// 查看當(dāng)前和HEAD的差別
git diff HEAD
// 將兩個(gè)分支最新的提交做對(duì)比
git diff master dev

// 查看簡(jiǎn)單的diff結(jié)果 追加--stat

// 比較兩次提交的差異
git diff HEAD^ HEAD
git diff SHA1 SHA2

git對(duì)比和合并默認(rèn)在命令行中操作朋贬,可配置beyondcompare等第三方可視化比對(duì)工具凯楔。配置自定義diff與merge工具

拉取與推送(pull&&push)
// 提交當(dāng)前暫存區(qū)修改
git commit -m "message"
// 提交當(dāng)前修改與暫存的修改
git commit -a -m "meaage"
// 將當(dāng)前修改追加到最近一次提交,不生成新的提交記錄
git commit --amend

// 推送當(dāng)前分支到遠(yuǎn)程倉庫(已關(guān)聯(lián)遠(yuǎn)程分支)
git push
// 未關(guān)聯(lián)遠(yuǎn)程分支
git push --set-upstream origin dev
// 推送到遠(yuǎn)程分支(如果遠(yuǎn)程沒有锦募,則創(chuàng)建一個(gè)新的分支)
git push origin master
// 推送到遠(yuǎn)程分支目錄
git push origin HEAD:release/3.0

// 拉取遠(yuǎn)程指定分支
git pull origin master

// 刪除遠(yuǎn)程分支
git push origin :<branchName>
git push origin --delete <branchName>

標(biāo)簽
// 查看所有tag
git tag

// 當(dāng)前分支的最新提交打一個(gè)tag
git tag release1.0

// 當(dāng)前分支某一次提交打一個(gè)tag
git tag release1.0 commitcode

// 刪除標(biāo)簽
git tag -d release1.0

// 推送標(biāo)簽到遠(yuǎn)程
git push origin <tagname>
// 推送所有標(biāo)簽到遠(yuǎn)程
git push origin --tags
// 刪除遠(yuǎn)程標(biāo)簽
git push origin :refs/tags/<tagname>
git push origin --delete tag <tagname>

// 獲取標(biāo)簽生成新的分支
git checkout -b branch_name tag_name

忽略文件(.gitinore)
子模塊
git submodule add *.git
git submodule init
git submodule update

git clone --recursive *.git
參考資料

Pro Git

Git教程

Git Submodule使用完整教程


以上主要用于自己總結(jié)常用git命令摆屯,后續(xù)也會(huì)持續(xù)更新,其中摘錄了部分網(wǎng)絡(luò)的文字與圖片御滩,侵刪鸥拧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末痰滋,一起剝皮案震驚了整個(gè)濱河市袋狞,隨后出現(xiàn)的幾起案子糖赔,更是在濱河造成了極大的恐慌磷杏,老刑警劉巖戈二,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刹淌,死亡現(xiàn)場(chǎng)離奇詭異膀篮,居然都是意外死亡猖凛,警方通過查閱死者的電腦和手機(jī)矫废,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門盏缤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蓖扑,你說我怎么就攤上這事唉铜。” “怎么了律杠?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵潭流,是天一觀的道長。 經(jīng)常有香客問我柜去,道長灰嫉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任嗓奢,我火速辦了婚禮讼撒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘股耽。我一直安慰自己根盒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布物蝙。 她就那樣靜靜地躺著炎滞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茬末。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音丽惭,去河邊找鬼击奶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛责掏,可吹牛的內(nèi)容都是我干的柜砾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼换衬,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼痰驱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞳浦,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤担映,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后叫潦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝇完,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年矗蕊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了短蜕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡傻咖,死狀恐怖朋魔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卿操,我是刑警寧澤警检,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站硬纤,受9級(jí)特大地震影響解滓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筝家,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一洼裤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧溪王,春花似錦腮鞍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至道伟,卻和暖如春迹缀,著一層夾襖步出監(jiān)牢的瞬間使碾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工祝懂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票摇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓砚蓬,卻偏偏與公主長得像矢门,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灰蛙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,665評(píng)論 9 163
  • Git是目前最流行的版本管理系統(tǒng)祟剔,也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,711評(píng)論 1 17
  • 人往高處走是人生追求,人往低處走是追求人生摩梧。 往往下者最難達(dá)到物延。 低調(diào)為人,坦然處世為老子道學(xué)之說… 然而...
    劉曉車閱讀 339評(píng)論 0 0
  • 昨天晚上障本,我和全國的家長朋友一起聆聽了愛教届、自然、生命力體系的一節(jié)微課《孩子愛哭驾霜、膽小怎么辦案训?》 對(duì)于這樣一個(gè)話題,...
    雯雯媽媽育兒先育己家庭教育隨筆閱讀 330評(píng)論 0 2
  • 如果你覺得你會(huì)離開粪糙,那說明你未曾來過上大學(xué)强霎,集體的觀念比高中淡化很多,更加注重的是個(gè)人的發(fā)展蓉冈。說真的城舞,好久都沒有和...
    scarqin閱讀 130評(píng)論 2 1