git命令總結(jié)

git學(xué)習(xí)網(wǎng)站:https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5

git學(xué)習(xí)思維導(dǎo)圖:http://www.reibang.com/p/e2f553942317

深入淺出:http://chengshiwen.com/article/head-first-git/

廖雪峰的git學(xué)習(xí)網(wǎng)站:

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

git幾個概念

版本庫:文件倉庫错敢,倉庫里的修改刪除翰灾,git都能跟蹤歷史,可以在將來某個時刻還原稚茅。

工作目錄:本地項目目錄

暫存區(qū)域:工作目錄和git目錄之間的中轉(zhuǎn)區(qū)(stage或index)

本地倉庫git目錄:本地代碼提交的目錄

git安裝方法

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000

創(chuàng)建版本庫

方法一:在github中新建項目纸淮,git clone下來

方法二:在本地已有項目里創(chuàng)建版本庫并關(guān)聯(lián)遠程倉庫

新建遠程倉庫:

方法一:

curl?-u?'username'?https://api.github.com/user/repos-d?'{"name":"RepoName"}'

方法二:在github網(wǎng)頁版上 右上角“+”號,點擊“New repository”

創(chuàng)建好后會得到一個遠程倉庫鏈接:https://github.com/sunshineMaria/testgit.git

關(guān)聯(lián)本地代碼與遠程倉庫:

cd testgit (進入項目目錄)

git init ? ? ? ?(把這個目錄變成Git可以管理的倉庫)

echo?"#?testgit"?>>README.md(新建一個README.md文件峰锁,內(nèi)容為# testgit)

git add . ? ? ?(添加所有工作區(qū)文件到暫存區(qū))

git commit -m 'README.md for this project' ? (提交示例文件到本地倉庫)

git remote add origin?https://github.com/sunshineMaria/testgit.git(為本地版本庫添加名為origin的遠程版本庫)

git push -u origin master??(執(zhí)行推送命令萎馅,完成GitHub版本庫的初始化。注意命令行中的-u參數(shù)虹蒋,在推送成功后自動建立本地分支與遠程版本庫分支的追蹤糜芳。)

改變項目地址:

git remote set-url origin https://github.com/sunshineMaria/testgit22.git

git remote -v???? 查看遠程倉庫信息

說明:調(diào)用git commit提交至本地的版本庫,調(diào)用git push將本地版本庫推送至遠程版本庫

問題:這里的origin和master指什么魄衅?

origin是遠程的意思峭竣,master是master分支。git push -u origin master 表示將本地版本庫推送到遠程master分支晃虫,-u參數(shù)表示在推送成功后自動建立本地分支與遠程版本庫分支的追蹤皆撩。

修改、提交和撤銷

Git的基本工作流程如下:

改動文件:在工作目錄中修改、刪除或添加某些文件

暫存文件:對改動后的文件進行快照扛吞,保存至?xí)捍鎱^(qū)域

提交快照:將保存在暫存區(qū)域的文件快照永久轉(zhuǎn)儲到Git目錄中

git add .??????????????????????????? 將目標(biāo)文件快照加到暫存區(qū)

git commit -m?‘xxx’ ? ? ? ? ?提交快照到本地倉庫

git commit -a -m ‘xx’ ? ? ? ?把所有已修改和已暫存的文件一并提交

git push ? ? ? ? ? ? ? ? ? ? ? ? ?? 將本地版本庫推送到遠程版本庫

git status ? ? ? ? ? ? ? ? ? ? ? ?? 查看修改了哪些文件

git reset HEAD file ? ? ? ? ? ? 撤銷加入暫存區(qū)的文件到工作區(qū)

git checkout file ? ? ? ? ? ? ? ?工作區(qū)的某文件恢復(fù)到和本地版本庫一樣,工作區(qū)修改會被拋棄

git reset --hard origin/master ? ? ? ? ?將本地狀態(tài)回退到和遠程的一樣呻惕,修改的代碼將會被拋棄

git clean -df ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 刪除與版本庫不同的新建的文件

差異比較

git diff ? ? ? ? ? ? ? ? ? ?? ?????比較工作目錄文件和暫存區(qū)域快照之間的差異(即修改后還沒有暫存起來的變化內(nèi)容)

git diff --cached ? ? ? ? ? ?比較暫存區(qū)快照和上次提交之前的差異

git diff?[--] ? ? ? ? ? ? ? ? ? ?比較工作目錄文件和暫存區(qū)快照之間指定文件的差異

git diff --cached [--] ? ?比較暫存區(qū)域快照和上次提交之間指定文件或目錄的差異

git diff HEAD ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?比較工作目錄文件和上次提交的差異

查看提交歷史

git log ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 按提交時間列出所有更新

git log -p用來顯示每次提交的內(nèi)容差異

git log -n ? ? ? ? ? ? ? ? ? ? ? ? 查看最近n次提交

git log --stat ? ? ? ? ? ? ? ? ? ? ? 查看每次提交的粗略內(nèi)容

git log 文件名 ? ? ? ? ? ? ? ? ? 只關(guān)心某個文件的提交歷史

git show 0bce78b ? ? ? ? ? ?查看某次提交的改動

git blame 文件名 ? ? ? ? ? ? ? 查看目前文件的每一行是哪個提交最后改動的

git log --author=名字 ? ? ?查看某個人的提交

git log -1 HEAD 文件名 ? ? 查看文件的最后提交歷史

git log --pretty=online ? ?可以指定使用不同于默認(rèn)格式的方式展示提交歷史,一行展示,顯示commit id和描述

git log --graph ? ? ? ? ? ? ? ?顯示ASCII圖形表示的分支合并歷史,配合—online更為簡潔

git log --grep ? ? ? ? ? ? ? ? ?搜索提交說明中匹配pattern的提交

git log --since, --after ? ? 僅顯示指定時間之后的提交git?log?--since=2.weeks

git log?—until,--before ? ?僅顯示指定時間之前的提交

git?log?--pretty=format:"%h?-?%an,?%ar?:?%s"? 定制顯示的記錄的格式

2008 年 10 月期間,提交的但未合并的測試腳本(位于項目的 t/ 目錄下的文件)

git?log?--pretty="%h?-?%s"? --since="2008-10-01"?\?--before="2008-11-01"?--no-merges?--?t/

Table 2-1.git log --pretty=format常用的選項

選項說明

%H ?提交對象(commit)的完整哈希字串

%h ?提交對象的簡短哈希字串

%T ?樹對象(tree)的完整哈希字串

%t ??樹對象的簡短哈希字串

%P ?父對象(parent)的完整哈希字串

%p ?父對象的簡短哈希字串

%an ?作者(author)的名字

%ae ?作者的電子郵件地址

%ad ?作者修訂日期(可以用 --date= 選項定制格式)

%ar ?作者修訂日期滥比,按多久以前的方式顯示

%cn ?提交者(committer)的名字

%ce ?提交者的電子郵件地址

%cd ?提交日期

%cr ?提交日期亚脆,按多久以前的方式顯示

%s ??提交說明

版本切換回退

參考鏈接:

http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html

git reset HEAD^ ? ?回退到上一個版本(本地)

git reset 版本號???? 回退到某一個版本

兩種情況:

1.沒有push

git?reset?[--soft?|?--mixed?|?--hard

默認(rèn)mixed: 保留源碼,只是將git commit和index信息回退到了某個版本

--soft:保留源碼,只回退到commit信息到某個版本.不涉及index的回退,如果還需要提交,直接commit即可.

--hard:源碼也會回退到某個版本,commit和index 都回回退到某個版本.(注意,這種方式是改變本地代碼源碼)

當(dāng)然有人在push代碼以后,也使用 reset --hard 回退代碼到某個版本之前,但是這樣會有一個問題,你線上的代碼沒有變,線上commit,index都沒有變,當(dāng)你把本地代碼修改完提交的時候你會發(fā)現(xiàn)全是沖突.....

所以,這種情況你要使用下面的方式

2.已經(jīng)push:回退本地代碼也想同時回退線上代碼盲泛,回滾到某個指定的版本濒持,線上線下保持一致

git revert 版本號

git push

分支管理

git branch ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 列出本地所有分支

git branch -a ? ? ? ? ? ? ? ? ? ? ? ?? 列出本地和遠程

git branch -r ? ? ? ? ? ? ? ? ? ? ? ? ? 列出遠程所有分支

git branch wxj????????????????????????創(chuàng)建分支 wxj

git checkout -b wxj????????????????創(chuàng)建+切換至

git checkout??wxj??????????????????? 切換分支

git merge wxj??????????????????????????合并某分支到當(dāng)前分支

git branch -D wxj????????????????????刪除未合并的分支

git branch -d wxj???????????????????? 刪除已合并的分支

修改遠程分支:1.重命名本地分支:git branch -m oldname newname 2.刪除遠程分支 3.推送本地分支到遠端

git push origin wxj??????????????????提交wxj分支到遠程分支

git push --set-upstream origin test???????? 提交代碼到遠程分支test,并且建立本地分支和遠程分支關(guān)聯(lián)

git push origin --delete serverfix ? 刪除遠程分支? ?

git push origin :branch-name? ? ? ?刪除遠程分支。冒號前面的空格不能少寺滚,原理是把一個空分支push到server上柑营,相當(dāng)于刪除該分支。

git reflog --date=local | grep?branch-name? ?查看某個分支的歷史記錄村视,可以看出該分支的來源分支

stash儲藏工作現(xiàn)場

git stash??????????????????????儲藏工作現(xiàn)場

git stash apply???????????? 恢復(fù)

git stash drop?????????????? 刪除儲藏的工作現(xiàn)場

git stash pop????????????????恢復(fù)+刪除

解決沖突

分支上該文件修改并提交殉摔,master該文件也修改并提交井濒。則合并的時候一定會沖突额衙,打開沖突代碼合并沖突蛮艰,重新提交。

解決二進制文件沖突

git checkout FILE --ours [ --theirs ]?

刪除文件

rm從工作目錄中刪除指定文件勒虾,但不從暫存區(qū)域移除

git rm從版本庫中刪除該文件 git rm后提交 ?git rm test.txt ? ?git commit -m?‘remove text.txt'

git rm --cached ...:僅僅將文件從暫存區(qū)域中移除(其狀態(tài)變?yōu)槲锤櫍┓睦粚υ撐募M行其它操作

git rm -f ? ? ? ? ? ? ? 強制刪除

git rm -r ? ? ? ? ? ? ??遞歸刪除(用于刪除目錄)

git clean ? ? ? ? ? ? ? 清除未跟蹤文件

git clean -n ? ? ? ? ? 顯示將要清除的文

git clean -f ? ? ? ? ? ?強制清除文件(不包括目錄)

git clean -df ? ? ? ?? 強制清除所有文件和目錄

設(shè)置命令別名

git config --global alias.co?checkout

git config --global alias.st?status

git config --global alias.ci?commit

git config --global alias.unstage ‘reset HEAD --'

git config --global alias.last ‘log -1 HEAD’?????????????? 最后一次提交信息

可能遇到的問題

你的小伙伴已經(jīng)向origin/dev分支推送了他的提交,而碰巧你也對同樣的文件作了修改修然,導(dǎo)致push失敗

解決辦法:

git pull把最新提交從遠程拉下來笛钝,然后在本地合并,解決沖突再推送

git pull也失敗

原因是沒有指定本地dev與遠程dev分支的鏈接愕宋,根據(jù)提示玻靡,設(shè)置dev和origin/dev的鏈接

git branch --set-upstream dev origin/dev

再pull

標(biāo)簽管理

創(chuàng)建和使用git ssh key

首先設(shè)置git的user name和email

git config --global user.name?"XXX"

git config --global user.email "XXX@gmail.com"

git config --list ? ? ? ? ? ? ? ? ? ? ? ?? ?????查看git配置

git config --global user.name? ? ? ? 查看某個git配置

https://ruby-china.org/topics/2423

查看是否已經(jīng)有了ssh密鑰: cd ~/.ssh?? 如果沒有密鑰則不會有此文件夾

ssh-keygen -t rsa -C “xxx@gmail.com”????????生成密鑰

按三個回車,密碼為空中贝,這里一般不適用密鑰

最后得到兩個文件 id_rsa和id_rsa.pub

注意:密鑰生成就不用改了囤捻,如果已經(jīng)生成就到 ~./ssh 文件夾下去找

忽略一些文件、文件夾不提交

在倉庫根目錄下創(chuàng)建名稱為“.gitignore”的文件邻寿,寫入不需要的文件夾名或文件蝎土,每個元素占一行即可,如

target

bin

*.db


用戶名郵箱提交錯了绣否,修改辦法

1誊涯、git rebase -I HEAD~2

2、pick —> edit

3蒜撮、git commit --amend --author=“xx <xx@yy.com>" --no-edit ? ? ?

4暴构、git rebase —continue

5、繼續(xù)?git commit --amend --author=“xx <xx@yy.com>" --no-edit

6、git rebase —continue

7取逾、會看到Successfully rebased and updated refs/heads/master

8耗绿、git push --force ?【有點危險,盡量減少】

上面的操作無法修改第一次提交砾隅,第一次提交用orphan 分支試試

1缭乘、git checkout —orphan source

2、git commit -m ‘init’

3琉用、git branch -m master oldmaster

4、git branch -m source master

5策幼、git branch --set-upstream-to=origin/master master

6邑时、git push -f

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市特姐,隨后出現(xiàn)的幾起案子晶丘,更是在濱河造成了極大的恐慌,老刑警劉巖唐含,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浅浮,死亡現(xiàn)場離奇詭異,居然都是意外死亡捷枯,警方通過查閱死者的電腦和手機滚秩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淮捆,“玉大人郁油,你說我怎么就攤上這事∨嗜” “怎么了桐腌?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苟径。 經(jīng)常有香客問我案站,道長,這世上最難降的妖魔是什么棘街? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任蟆盐,我火速辦了婚禮,結(jié)果婚禮上蹬碧,老公的妹妹穿的比我還像新娘舱禽。我一直安慰自己,他們只是感情好恩沽,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布誊稚。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪里伯。 梳的紋絲不亂的頭發(fā)上城瞎,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音疾瓮,去河邊找鬼脖镀。 笑死,一個胖子當(dāng)著我的面吹牛狼电,可吹牛的內(nèi)容都是我干的蜒灰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肩碟,長吁一口氣:“原來是場噩夢啊……” “哼强窖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起削祈,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤翅溺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后髓抑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咙崎,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年吨拍,在試婚紗的時候發(fā)現(xiàn)自己被綠了褪猛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡密末,死狀恐怖握爷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情严里,我是刑警寧澤新啼,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站刹碾,受9級特大地震影響燥撞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迷帜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一物舒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戏锹,春花似錦冠胯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽置蜀。三九已至,卻和暖如春悉盆,著一層夾襖步出監(jiān)牢的瞬間盯荤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工焕盟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秋秤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓脚翘,卻偏偏與公主長得像灼卢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子来农,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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