Git使用1

1.申請(qǐng) SSH Key

命令:

$ git config --global user.name "zhenglm"
$ git config --global user.email "578314999@qq.com"
$ ssh-keygen -t rsa -C "578314999@qq.com"

說(shuō)明:前兩個(gè)命令是 第一次打開(kāi) Git時(shí)垦写,對(duì)本地環(huán)境的配置
第三個(gè)命令是 生成 ssh的Key生成的 ssh key是兩個(gè)文件,在系統(tǒng)當(dāng)前用戶目錄(C:\Users\zhenglm)下的 .ssh 目錄下,其中 id_rsa.pub是公鑰放在github上,id_rsa是私鑰保留在本地就好。
因?yàn)镚itHub需要識(shí)別出你推送的提交確實(shí)是你推送的氯析,而不是別人冒充的

2.將遠(yuǎn)程倉(cāng)庫(kù)拷貝到本地

命令:

$ git clone git@github.com:zhangyaoyuan/PkuJava31.git

3.將剛才拷貝到本地的項(xiàng)目的分支check到本地

命令:

$ git checkout -b 1501211044
Switched to a new branch '1501211044'

說(shuō)明:將已經(jīng)存在的 1501211044 分支checkout到本地了,并切換到分支Git checkout 命令加上 -b參數(shù)表示創(chuàng)建并且切換莺褒,相當(dāng)于同時(shí)執(zhí)行了兩條命令

$ git branch 1501211044
$ git checkout 1501211044   --- 切換到 1501211044 分支
Switched to branch '1501211044'     

在你切換到 1501211044 分支后魄鸦,你此時(shí)提交的文檔就相當(dāng)于提交到了當(dāng)前分支里面,在你將分支與主干(master)合并之前癣朗,并不會(huì)影響 master拾因。

4.查看當(dāng)前分支

可以讓我們時(shí)刻掌握倉(cāng)庫(kù)當(dāng)前的狀態(tài):

$ git branch
* 1501211044
  Master

5.修改分支后提交分支

命令:

$ git add zlmtest.txt
$ git commit -m "branch test"
[1501211044 17d4022] branch test
 1 file changed, 1 insertion(+)
 create mode 100644 zlmtest.txt

第一條命令作用是把你新添加到分支的文件add到Git系統(tǒng)的索引庫(kù),第二條命令的作用是根據(jù)索引庫(kù)內(nèi)容提交(-m參數(shù)后跟的是提交時(shí)的說(shuō)明信息)旷余。如果你沒(méi)有把新添加的文件先add的話绢记,而是直接commit,那么會(huì)出現(xiàn)如下的提示:

Git add 命令的一點(diǎn)補(bǔ)充:

(1)git add <path> :表示將path中所有修改的和新添加的命令添加正卧,不包括刪除的文件蠢熄。
(2)git add -u [<path>] :表示將path中所有tracked(之前已經(jīng)添加過(guò))的修改過(guò)的和刪除的文件添加到索引庫(kù)。不包括新建的文件炉旷。
(3)git add -A [<path>] :表示將path中所有tracked文件中被修改和刪除的文件以及untracked文件信息添加到索引庫(kù)签孔。
(4)git add -i [<path>] :查看path中所有修改和已刪除的文件。

6窘行、將分支內(nèi)容合并到 master

命令: MINGW64 ~/PkuJava31 (master)

$ git merge 1501211044

說(shuō)明:git merge 命令的作用是合并某指定分支 到當(dāng)前分支饥追。所以如果要將1501211044分 支合并到 master必須要用 git checkout命令切換到 master分之后,再執(zhí)行 git merge 1501211044 命令罐盔。
此時(shí)在 GitHub上還看不到新的提交后的結(jié)果但绕,因?yàn)檫@只是對(duì)你本地副本的操作。

7惶看、將合并到master的修改結(jié)果推送的遠(yuǎn)程主機(jī)GitHub

命令: MINGW64 ~/PkuJava31 (master)

$ git push origin master

說(shuō)明:使用 git push命令將修改信息推送到遠(yuǎn)程主機(jī)捏顺,
格式:$ git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
遠(yuǎn)程主機(jī)名默認(rèn)為 origin ,<本地分支名>是你要push的本地分支的名稱纬黎,這里是master<遠(yuǎn)程分支名> 如果不填默認(rèn)為本地分支對(duì)應(yīng)的遠(yuǎn)程分支幅骄。

8.刪除分支

命令:MINGW64 ~/PkuJava31 (1501211044)

$ git branch -d 1501211044

1. 查看修改的內(nèi)容

第一天上班時(shí),已經(jīng)記不清上次怎么修改的readme.txt本今,所以拆座,需要用git diff這個(gè)命令看看:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system. Git is free software.

2.commit

“保存一個(gè)快照”主巍,這個(gè)快照在Git中被稱為commit。一旦你把文件改亂了懂拾,或者誤刪了文件煤禽,還可以從最近的一個(gè)commit恢復(fù)铐达,然后繼續(xù)工作岖赋,而不是把幾個(gè)月的工作成果全部丟失。

3 . 顯示提交的歷史記錄

git log命令顯示從最近到最遠(yuǎn)的提交日志
如果嫌輸出信息太多瓮孙,看得眼花繚亂的唐断,可以試試加上--pretty=oneline
參數(shù):

$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

**4.commit 版本的回溯

(1)回退到上一個(gè)版本

$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed

(2)如果想在回去,需要版本的id號(hào)

$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

(3)Git提供了一個(gè)命令git reflog
用來(lái)記錄你的每一次命令:

$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

**5.git的核心概念理解

1.工作區(qū)(Working Directory)
就是你在電腦里能看到的目錄
2.版本庫(kù)(Repository)
工作區(qū)有一個(gè)隱藏目錄.git

Paste_Image.png
提交流程

第一步是用git add把文件添加進(jìn)去,實(shí)際上就是把文件修改添加到暫存區(qū)杭抠;
第二步是用git commit提交更改脸甘,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。

因?yàn)槲覀儎?chuàng)建Git版本庫(kù)時(shí)偏灿,Git自動(dòng)為我們創(chuàng)建了唯一一個(gè)master分支丹诀,所以,現(xiàn)在翁垂,git commit就是往master分支上提交更改铆遭。

例子

先對(duì)readme.txt做個(gè)修改,比如加上一行內(nèi)容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.

先用git status查看一下?tīng)顟B(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: readme.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# LICENSEno changes added to commit (use "git add" and/or "git commit -a")

Git非常清楚地告訴我們沿猜,readme.txt被修改了枚荣,而LICENSE還從來(lái)沒(méi)有被添加過(guò),所以它的狀態(tài)是Untracked啼肩。

使用兩次命令git add橄妆,把readme.txt和LICENSE都添加后,用git status
再查看一下:

$ git status
# On branch master
# Changes to be committed:
#     (use "git reset HEAD <file>..." to unstage)
#
#     new file: LICENSE
#     modified: readme.txt#

暫存區(qū)的狀態(tài)就變成這樣了

Paste_Image.png

執(zhí)行g(shù)it commit就可以一次性把暫存區(qū)的所有修改提交到分支祈坠。

$ git commit -m "understand how stage works"
[master 27c9860] understand how stage works 2 files changed, 675 insertions(+) create mode 100644 LICENSE

一旦提交后害碾,如果你又沒(méi)有對(duì)工作區(qū)做任何修改,那么工作區(qū)就是“干凈”的:

$ git status
# On branch masternothing to commit (working directory clean)
Paste_Image.png

6. 查看工作區(qū)和版本庫(kù)區(qū)別

git diff HEAD -- readme.txt
命令可以查看工作區(qū)和版本庫(kù)里面最新版本的區(qū)別:最后兩行

$ git diff HEAD -- readme.txt 
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software distributed under the GPL.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.

7. 撤銷(xiāo)修改

(1)沒(méi)有add
你在readme.txt中添加了一行:

$ cat readme.txtGit is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.

你可以刪掉最后一行赦拘,手動(dòng)把文件恢復(fù)到上一個(gè)版本的狀態(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: readme.txt
#no changes added to commit (use "git add" and/or "git commit -a")

Git會(huì)告訴你,git checkout -- file可以丟棄工作區(qū)的修改:

$ git checkout -- readme.txt

命令git checkout -- readme.txt意思就是另绩,把readme.txt文件在工作區(qū)的修改全部撤銷(xiāo)儒陨,這里有兩種情況:

一種是readme.txt自修改后還沒(méi)有被放到暫存區(qū),現(xiàn)在笋籽,撤銷(xiāo)修改就回到和版本庫(kù)一模一樣的狀態(tài)蹦漠;
一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改车海,現(xiàn)在笛园,撤銷(xiāo)修改就回到添加到暫存區(qū)后的狀態(tài)隘击。

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

(2).已經(jīng)調(diào)用了add
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.
$ git add readme.txt

用git status查看一下埋同,修改只是添加到了暫存區(qū),還沒(méi)有提交:

$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: readme.txt
#

用命令git reset HEAD file可以把暫存區(qū)的修改撤銷(xiāo)掉(unstage)棵红,重新放回工作區(qū)

$ git reset HEAD readme.txt
Unstaged changes after reset:M readme.txt

git reset命令既可以回退版本凶赁,也可以把暫存區(qū)的修改回退到工作區(qū)。當(dāng)我們用HEAD時(shí)逆甜,表示最新的版本虱肄。
再用git status查看一下,現(xiàn)在暫存區(qū)是干凈的交煞,工作區(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: readme.txt
#no changes added to commit (use "git add" and/or "git commit -a")

最后丟掉工作區(qū)

$ git checkout -- readme.txt
$ git status
# On branch masternothing to commit (working directory clean)

(3)已經(jīng)commit了 那么參考版本回退一節(jié)
如果已經(jīng)push到了遠(yuǎn)程咏窿,那就真慘了

8.刪除文件

在Git中,刪除也是一個(gè)修改操作素征,先添加一個(gè)新文件test.txt到Git并且提交:

$ git add test.txt
$ git commit -m "add test.txt"
[master 94cdc44] add test.txt 1 file changed, 1 insertion(+) create mode 100644 test.txt

然后直接刪除

$ rm test.txt

這個(gè)時(shí)候集嵌,Git知道你刪除了文件,因此御毅,工作區(qū)和版本庫(kù)就不一致了根欧,git status命令會(huì)立刻告訴你哪些文件被刪除了:

$ git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: test.txt
#no changes added to commit (use "git add" and/or "git commit -a")

現(xiàn)在你有兩個(gè)選擇,
一是確實(shí)要從版本庫(kù)中刪除該文件亚享,那就用命令git rm刪掉咽块,并且git commit:

$ git rm test.txtrm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt 1 file changed, 1 deletion(-) delete mode 100644 test.txt

另一種情況是刪錯(cuò)了,因?yàn)榘姹編?kù)里還有呢欺税,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:

$ git checkout -- test.txt

git checkout其實(shí)是用版本庫(kù)里的版本替換工作區(qū)的版本侈沪,無(wú)論工作區(qū)是修改還是刪除,都可以“一鍵還原”晚凿。但會(huì)丟失最近一次提交后你修改的內(nèi)容

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亭罪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子歼秽,更是在濱河造成了極大的恐慌应役,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燥筷,死亡現(xiàn)場(chǎng)離奇詭異箩祥,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)肆氓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)袍祖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人谢揪,你說(shuō)我怎么就攤上這事蕉陋【杵荆” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵凳鬓,是天一觀的道長(zhǎng)茁肠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)缩举,這世上最難降的妖魔是什么垦梆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蚁孔,結(jié)果婚禮上奶赔,老公的妹妹穿的比我還像新娘惋嚎。我一直安慰自己杠氢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布另伍。 她就那樣靜靜地躺著鼻百,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摆尝。 梳的紋絲不亂的頭發(fā)上温艇,一...
    開(kāi)封第一講書(shū)人閱讀 49,879評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音堕汞,去河邊找鬼勺爱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛讯检,可吹牛的內(nèi)容都是我干的琐鲁。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼人灼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼围段!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起投放,我...
    開(kāi)封第一講書(shū)人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奈泪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后灸芳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體涝桅,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年烙样,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冯遂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡误阻,死狀恐怖债蜜,靈堂內(nèi)的尸體忽然破棺而出晴埂,到底是詐尸還是另有隱情,我是刑警寧澤寻定,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布儒洛,位于F島的核電站,受9級(jí)特大地震影響狼速,放射性物質(zhì)發(fā)生泄漏琅锻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一向胡、第九天 我趴在偏房一處隱蔽的房頂上張望恼蓬。 院中可真熱鬧,春花似錦僵芹、人聲如沸处硬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荷辕。三九已至,卻和暖如春件豌,著一層夾襖步出監(jiān)牢的瞬間疮方,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工茧彤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骡显,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓曾掂,卻偏偏與公主長(zhǎng)得像惫谤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遭殉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

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

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git石挂,從https:/...
    落魂灬閱讀 12,655評(píng)論 4 54
  • 臨近中午快下班時(shí)接到通知:環(huán)保來(lái)查,全部停工险污。下午上班的有:前邊辦公室和后邊盤(pán)底盤(pán)蓋銷(xiāo)售部痹愚,其他部門(mén)放假,包括做飯的蛔糯。
    花椒味的饅頭閱讀 187評(píng)論 0 0
  • 一、關(guān)注更少淮逻,而非更多琼懊。新年伊始我們總是雄心勃勃的給自己定下一堆新年計(jì)劃阁簸,但最后都不知道從哪件事開(kāi)始著手,把自己忙...
    圓舞amour閱讀 459評(píng)論 0 3