Git常用命令

我的常用:

===================================
** 撤銷工作修改:**
1、git checkout
2、git reset --hard

回滾并提交到某個版本號
git cherry-pick 29d4fa6

===================================

1.創(chuàng)建倉庫

mkdir gitTest
cd gitTest ——創(chuàng)建/home/XXX/gitTest空目錄

2.通過git init命令把這個目錄變成Git可以管理的倉庫:

git init ——初始化Git倉庫

3.用命令git add告訴Git,把文件添加到倉庫(實際上就是把文件修改添加到暫存區(qū)):

git add filename

4.用命令git commit告訴Git,把文件提交到倉庫(實際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支):

git commit -m "有意義的附加說明"

5.隨時掌握工作區(qū)的狀態(tài)

git status

6.查看文件被修改的內(nèi)容

git diff

7.查看代碼的歷史版本號

git log
git log --pretty=oneline ——要求版本信息只能在一行中顯示

8.HEAD指向的版本就是當(dāng)前版本,因此,Git允許我們在版本的歷史之間穿梭

git reset --hard commit_id
或git reset --hard HEAD(HEAD^等等)

9.查看命令歷史,以便確定要回到未來的哪個版本

git reflog

10.弄明白Git的工作區(qū)(當(dāng)前分區(qū))和暫存區(qū)

11.理解Git是如何跟蹤修改的,每次修改,如果不add到暫存區(qū),那就不會加入到commit中

12.撤銷修改

命令git checkout -- filename
意思就是,把filename文件在工作區(qū)的修改全部撤銷,這里有兩種情況:

  • 一種是filename自修改后還沒有被放到暫存區(qū),現(xiàn)在,撤銷修改就回到和版本庫一模一樣的狀態(tài);
  • 一種是filename已經(jīng)添加到暫存區(qū)后,又作了修改,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。

總之,就是讓這個文件回到最近一次git commit或git add時的狀態(tài)。

  • 場景1:當(dāng)你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時,用命令git checkout -- file
    git checkout其實是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除,都可以“一鍵還原”。
  • 場景2:當(dāng)你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加到了暫存區(qū)時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
  • 場景3:已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交,版本回退,不過前提是沒有推送到遠程庫。

13.刪除文件
命令git rm用于刪除一個文件。如果一個文件已經(jīng)被提交到版本庫,那么你永遠不用擔(dān)心誤刪,但是要小心,你只能恢復(fù)文件到最新版本,你會丟失最近一次提交后你修改的內(nèi)容。

14.將本地倉庫與github倉庫關(guān)聯(lián)起來
往里面添加文件:

  touch README.md
  git init
  git add README.md
  git commit -m "first commit"
  git remote add origin  
  git@github.com:sysublackbear/Learmgitfirst.git
  git push -u origin master   

將本地倉庫同步github倉庫:

  • 1 git remote add origin git@github.com:sysublackbear/Learmgitfirst.git
  • 2 git push -u origin master

然后,從現(xiàn)在起,只要本地作了提交,就可以通過命令:
1 git push origin master

把本地master分支的最新修改推送至GitHub

15.多人協(xié)作一個項目的時候,我們每個人可以通過從遠程倉庫克隆一份來作為己用。
1 git clone git@github,com:sysublackbear/XXXX.git

16.創(chuàng)建分支并且切換到分支
1 git checkout -b dev2 Switched to a new branch 'dev'

等價于:
1 git branch dev2 git checkout dev3 Switched to branch 'dev'

查看分支:
1 git branch

將次分支合并到主分支上面:
1 git merge dev

刪除分支:
1 git branch -d dev2 Deleted branch dev (was fec145a).

17.解決沖突
當(dāng)Git無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成。
git log --graph命令可以看到分支合并圖。

18.Bug修復(fù)
修復(fù)bug時,我們會通過創(chuàng)建新的bug分支進行修復(fù),然后合并,最后刪除;
當(dāng)手頭工作沒有完成時,先把工作現(xiàn)場git stash一下,然后去修復(fù)bug,修復(fù)后,再git stash pop,回到工作現(xiàn)場

19.開發(fā)新功能
開發(fā)一個新功能,最好新建一個分支;
如果要丟棄一個沒有被合并過的分支,可以通過git branch -D name強行刪除。

20.參與開源項目先要克隆一份到本地
1 git clone git@github.com:michaelliao/bootstrap.git

====== 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.lxweimin.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 originhttps://github.com/sunshineMaria/testgit.git(為本地版本庫添加名為origin的遠程版本庫)
git push -u origin master (執(zhí)行推送命令,完成GitHub版本庫的初始化。注意命令行中的-u參數(shù),在推送成功后自動建立本地分支與遠程版本庫分支的追蹤。)
改變項目地址:
git remote set-url originhttps://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 -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 刪除已合并的分支
git push origin wxj 提交wxj分支到遠程分支
git push --set-upstream origin test 提交代碼到遠程分支test,并且建立本地分支和遠程分支關(guān)聯(lián)
stash儲藏工作現(xiàn)場
git stash 儲藏工作現(xiàn)場
git stash apply 恢復(fù)
git stash drop 刪除儲藏的工作現(xiàn)場
git stash pop 恢復(fù)+刪除



解決沖突
分支上該文件修改并提交,master該文件也修改并提交。則合并的時候一定會沖突,打開沖突代碼合并沖突,重新提交。
刪除文件
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
文/sunshine_Maria(簡書作者)原文鏈接:http://www.lxweimin.com/p/bcd155258985著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),并標(biāo)注“簡書作者”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,958評論 2 373

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

  • 分布式版本管理工具 git屬于分布式 svn集中式 git安裝 git初始化一個倉庫 其實就是創(chuàng)建了一個.git隱...
    SnowDragonYY閱讀 1,511評論 0 0
  • 初始化配置 #配置使用git倉庫的人員姓名 git config --global user.name "Your...
    賤精先玍丶閱讀 347評論 0 0
  • statues:diet: meat. failed controlexercise: little conclu...
    歐陽去非閱讀 160評論 0 0
  • 傍晚夜班車披著寶藍的毛衣行駛著 花兒們收下今日呼吸的陽光 準(zhǔn)時點亮的燈如同地球上的螢火蟲 傍晚的轎車打著暖光燈各自...
    綠子世界閱讀 189評論 0 0
  • 華燈不累揭夜幕 疲乏惹身伴歸路 此歸彼歸天壤別 天涯一窠在何處
    李橙梨閱讀 226評論 0 0