git學(xué)習(xí)筆記

參考鏈接

廖雪峰Git教程
Git常見問題

配置全局用戶

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

【注意】git config命令的--global參數(shù)君珠,用了這個參數(shù)倍靡,表示你這臺機器上所有的Git倉庫都會使用這個配置,當(dāng)然也可以對某個倉庫指定不同的用戶名和Email地址桅咆。

創(chuàng)建本地版本庫

版本庫又名倉庫,可以理解成是一個目錄,這個目錄中的所有文件都被git管理起來窑多。

  1. 創(chuàng)建空目錄
λ mkdir dxf_test_git
λ cd dxf_test_git
λ pwd

>> C:\Users\IdeaProjects\dxf_test_git
  1. 將目錄變成Git可以管理的倉庫
λ git init

>> Initialized empty Git repository in C:\Users\IdeaProjects\dxf_test_git/.git/
  1. 將改動的文件添加到倉庫
    在dxf_test_git目錄下新建一個test.txt文件,并添加兩行內(nèi)容洼滚,然后將改動添加至倉庫埂息。
# git add testfile 添加改動的文件,git add . 添加所有改動的文件 
# git commit -m “……” 提交改動信息,引號中為改動提示千康,便于查找 
λ git add test.txt 
λ git commit -m "wrote a readme file"

>>  1 file changed, 2 insertions(+)
    create mode 100644 test.txt
# 表示一個文件被改動享幽,添加了兩行內(nèi)容。
  1. 查看倉庫改動狀態(tài)
λ git status

>>  On branch master
    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:   test.txt

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

git status命令可以讓我們時刻掌握倉庫當(dāng)前的狀態(tài)吧秕,上面的命令輸出告訴我們琉闪,test.txt被修改過了迹炼,但還沒有準備提交的修改砸彬。用git diff這個命令看看,可以看到具體修改了什么內(nèi)容斯入。

λ git diff

>>  diff --git a/test.txt b/test.txt
    index d8036c1..d55a7b6 100644
    --- a/test.txt
    +++ b/test.txt
    @@ -1,2 +1,4 @@
    Git is a version control system.
    +Git is free software.
    +Git is a distributed version control system.
    Git is free software.
    \ No newline at end of file
  1. 查看提交記錄
λ git log

>>  commit 9857b0eb859740cb7846a5b9f8bb4ef2fd849b76 (HEAD -> master)
    Author: MyName <MyName@qq.com>
    Date:   Mon Aug 19 16:42:38 2019 +0800

        This is a test file

    commit 05e0a6a03c1c29ccdbf5393483a5e21a65a359d8
    Author: MyName <MyName@qq.com>
    Date:   Mon Aug 19 14:54:41 2019 +0800

        write a test file

git log命令顯示從最近到最遠的提交日志砂碉,如果嫌信息太多,可以試試加上--pretty=oneline參數(shù):

λ git log --pretty=oneline

>>  9857b0eb859740cb7846a5b9f8bb4ef2fd849b76 (HEAD -> master) This is a test file
    05e0a6a03c1c29ccdbf5393483a5e21a65a359d8 write a test file

"9857b0……"是Git的commit id刻两,用十六進制表示增蹭。

  1. 版本回退
    在Git中,用HEAD表示當(dāng)前版本磅摹,也就是最新的提交"9857b0……"(注意我的提交ID和你的肯定不一樣)滋迈,上一個版本就是HEAD,上上一個版本就是HEAD^户誓,HEAD~100表示前第100個版本饼灿。
λ git reset --hard HEAD^

>>  More?
    More?
    fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.Use '--' to separate paths from revisions, like this:'git <command> [<revision>...] -- [<file>...]'
# 回退失敗:由于windows中^是特殊字符帝美,因此要加引號 

λ git reset --hard HEAD‘^’

>>  HEAD is now at 05e0a6a write a test file

當(dāng)你回退到了某個版本碍彭,又后悔了,想恢復(fù)到新版本卻找不到新版本的commit id時悼潭,可以用git reflog查看每一次命令庇忌。

λ git reflog

>>  05e0a6a (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
    9857b0e HEAD@{1}: commit: This is a test file
    05e0a6a (HEAD -> master) HEAD@{2}: commit (initial): write a test file

由此可知,新版本的id是9857b0e舰褪,可以用λ git reset --hard 9857b0e命令返回新的版本皆疹。

  1. 撤銷修改
    情況一:修改了文件,但是還沒有add占拍,可以用git checkout -- file命令清除工作區(qū)的修改略就。注意,--很重要刷喜,沒有--残制,就變成了“切換到另一個分支”的命令。
λ git status

>>  On branch master
    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:   test.txt

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

λ git checkout -- test.txt

λ git status

>>  On branch master
    nothing to commit, working tree clean

情況二:修改了文件掖疮,并且已經(jīng)add初茶,但是還沒有commit。可以用git reset HEAD file命令把暫存區(qū)的修改撤銷掉(unstage)恼布,重新放回工作區(qū)螺戳,再用git checkout -- file命令清除工作區(qū)。

λ git reset HEAD test.txt

>>  Unstaged changes after reset:
    M       test.txt

λ git checkout -- test.txt
  1. 刪除文件
    情況一:誤刪
λ git checkout -- delete.txt

情況二:確實要刪掉

λ git rm delete.txt
λ git commit -m "remove the delete.txt"

遠程倉庫

  1. 關(guān)聯(lián)遠程倉庫
λ git remote add origin ssh://git@xxxxxxxx/LearnGit.git

遠程庫的名字就是origin折汞,這是Git默認的叫法倔幼,也可以改成別的,但是origin這個名字一看就知道是遠程庫爽待。

  1. 推送本地倉庫內(nèi)容
λ git push -u origin master

第一次推送master分支時损同,加上了-u參數(shù),Git不但會把本地的分支內(nèi)容推送的遠程新的master分支鸟款,還會把本地的master分支和遠程的master分支關(guān)聯(lián)起來膏燃,在以后的推送或者拉取時就可以簡化命令。

  1. 克隆遠程庫內(nèi)容至本地
λ git clone ssh://git@xxxxxxxx/LearnGit.git
  1. 創(chuàng)建分支
λ git checkout -b dev

-b表示創(chuàng)建并切換分支何什,相當(dāng)于以下兩條命令:

λ git branch dev
λ git checkout dev

用git branch命令查看當(dāng)前分支组哩。git branch命令會列出所有分支,當(dāng)前分支前面會標一個*號处渣。

λ git branch
    * dev
    master

然后伶贰,我們就可以在dev分支上正常提交,比如對test.txt做個修改罐栈。此時黍衙,如果再將分支切換回master,會發(fā)現(xiàn)test.txt中沒有新添加的內(nèi)容悠瞬。

  1. 合并指定分支到當(dāng)前
λ git merge dev

>>  Updating 1dbbb68..65677ed
    Fast-forward
    test.txt | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)
  1. 刪除分支
 $ git branch -d dev
  1. 儲藏分支
    在dev分區(qū)下工作们豌,工作只進行到一半,還沒法提交浅妆,但必須馬上解決一個bug望迎,可以利用stash功能把當(dāng)前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作凌外,另外創(chuàng)建issue分支來修復(fù)bug辩尊。
# on branch dev
λ git stash
# 返回master分支,在master分支上創(chuàng)建新的issue分支用來解決bug康辑,合并master分支摄欲,并刪除issue分支
# 回到dev分支
λ git stash list
λ git stash apply
λ git stash drop
λ git stash pop

可以多次stash,恢復(fù)的時候疮薇,先用git stash list查看胸墙,然后用命令git stash apply stash@{0}恢復(fù)指定的stash。
同樣的bug按咒,要在dev上修復(fù)迟隅,我們只需要把fix bug 101這個提交所做的修改“復(fù)制”到dev分支。注意:我們只復(fù)制fix bug 101這個提交所做的修改,并不是把整個master分支merge過來智袭。Git專門提供了一個cherry-pick命令奔缠,讓我們能復(fù)制一個特定的提交到當(dāng)前分支。

λ git branch
    * dev
    maste
    
# 4c805e2是fix bug 101這個提交的id
λ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
 1 file changed, 1 insertion(+), 1 deletion(-)
  1. 查看遠程庫信息
λ git remote -v
  1. 建立本地分支和遠程分支的關(guān)聯(lián)
λ git branch --set-upstream branch-name origin/branch-name
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吼野,一起剝皮案震驚了整個濱河市校哎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瞳步,老刑警劉巖闷哆,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谚攒,居然都是意外死亡阳准,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門馏臭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讼稚,你說我怎么就攤上這事括儒。” “怎么了锐想?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵帮寻,是天一觀的道長。 經(jīng)常有香客問我赠摇,道長固逗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任藕帜,我火速辦了婚禮烫罩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洽故。我一直安慰自己贝攒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布时甚。 她就那樣靜靜地躺著隘弊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荒适。 梳的紋絲不亂的頭發(fā)上梨熙,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音刀诬,去河邊找鬼咽扇。 笑死,一個胖子當(dāng)著我的面吹牛珠闰,可吹牛的內(nèi)容都是我干的炭序。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼侦香,長吁一口氣:“原來是場噩夢啊……” “哼把敞!你這毒婦竟也來了弥奸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤奋早,失蹤者是張志新(化名)和其女友劉穎盛霎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耽装,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡愤炸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掉奄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片规个。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖姓建,靈堂內(nèi)的尸體忽然破棺而出诞仓,到底是詐尸還是另有隱情,我是刑警寧澤速兔,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布墅拭,位于F島的核電站,受9級特大地震影響涣狗,放射性物質(zhì)發(fā)生泄漏谍婉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一镀钓、第九天 我趴在偏房一處隱蔽的房頂上張望穗熬。 院中可真熱鬧,春花似錦掸宛、人聲如沸死陆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽措译。三九已至,卻和暖如春饰序,著一層夾襖步出監(jiān)牢的瞬間领虹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工求豫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留塌衰,地道東北人诉稍。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像最疆,于是被迫代替她去往敵國和親杯巨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

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