git使用教程

參考資料:Git教程

  1. 創(chuàng)建一個(gè)空目錄
#添加文件夾
$ mkdir learngit
↓
#索引到該文件夾
$ cd learngit
↓
#查看添加結(jié)果
$ pwd
--->/c/Users/Xiaoji/learngit

  1. 通過(guò)git init命令把這個(gè)目錄變成Git可以管理的倉(cāng)庫(kù)
$ git init
--->Initialized empty Git repository in C:/Users/Xiaoji/learngit/.git/

  1. 把文件添加到倉(cāng)庫(kù)
#編寫一個(gè)readme.txt文件,內(nèi)容如下:
Git is a version control system.
Git is free software.
#!一定要放到learngit目錄下(子目錄也行),因?yàn)檫@是一個(gè)Git倉(cāng)庫(kù)招拙,放到其他地方Git再厲害也找不到這個(gè)文件
↓
#用命令git add告訴Git讯壶,把文件添加到倉(cāng)庫(kù):
$ git add readme.txt
↓
# 用命令git commit告訴Git裹赴,把文件提交到倉(cāng)庫(kù):
$ git commit -m 'wrote a readme.txt'  #-m后面輸入的是本次提交的說(shuō)明缝其,可以輸入任意內(nèi)容
--->
[master (root-commit) 37424cf] wrote a readme.txt
 1 file changed, 2 insertions(+)  #1 file changed:1個(gè)文件被改動(dòng),2 insertions:插入了兩行內(nèi)容
 create mode 100644 readme.txt
tips:
#可以多次add不同的文件搜变,commit可以一次提交很多文件
$ git add <file>:$ git add file2.txt file3.txt

$ git commit -m "add 2 files."

  1. 修改文件內(nèi)容并提交:
# 繼續(xù)修改readme.txt文件缅茉,改成如下內(nèi)容:
Git is a distributed version control system.
Git is free software.

#運(yùn)行g(shù)it status命令看看結(jié)果:
$ 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")  #readme.txt被修改過(guò)了,但還沒(méi)有準(zhǔn)備提交的修改

# 用git diff這個(gè)命令看看具體修改了什么內(nèi)容
$ git diff
--->
diff --git a/readme.txt b/readme.txt
index d8036c1..013b5bc 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.  #添加了一個(gè)distributed單詞
 Git is free software.
\ No newline at end of file

# 提交修改后的文件
$ git add readme.txt
$ git commit -m "add distributed"

# 再次查看結(jié)果:
$ git status
--->
On branch master
nothing to commit, working tree clean  #Git告訴我們當(dāng)前沒(méi)有需要提交的修改视乐,而且洛搀,工作目錄是干凈(working tree clean)的
tips:
git diff    #是工作區(qū)(work dict)和暫存區(qū)(stage)的比較
git diff --cached    #是暫存區(qū)(stage)和分支(master)的比較
git diff HEAD -- file    #比較的是工作區(qū)中的文件與版本庫(kù)中文件的差異

  1. 查看修改的歷史記錄
$ git log
--->
commit 10e3ff13cb1552ae791c84392b8e6eaed78e55f5 (HEAD -> master)
Author: Xiaoji <Xiaoji@Xiaoji>
Date:   Thu Aug 16 18:24:59 2018 +0800

    append GPL

commit 98f655214d25482fe581f6bfa5d73b83dfa849f4
Author: Xiaoji <Xiaoji@Xiaoji>
Date:   Thu Aug 16 18:15:12 2018 +0800

    add distributed

commit 37424cf2fb099229724cd19dfd68f63d4d73167d
Author: Xiaoji <Xiaoji@Xiaoji>
Date:   Thu Aug 16 17:58:38 2018 +0800

    wrote a readme.txt
-----------------------------------------------------------------------------------------------------
#簡(jiǎn)單版歷史記錄
$ git log --pretty=oneline
--->
10e3ff13cb1552ae791c84392b8e6eaed78e55f5 (HEAD -> master) append GPL
98f655214d25482fe581f6bfa5d73b83dfa849f4 add distributed
37424cf2fb099229724cd19dfd68f63d4d73167d wrote a readme.txt

  1. 退回到上一個(gè)版本
#HEAD表示當(dāng)前版本,HEAD^上一個(gè)版本,HEAD^^上上一個(gè)版本
#HEAD~100往上100個(gè)版本
$ git reset --hard HEAD^  
--->
HEAD is now at 98f6552 add distributed

  1. 反悔了上面的退回操作,需要重新找回退回前的版本
# 1佑淀、有之前要退回到commit id:
$ git reset --hard 10e3ff
--->
HEAD is now at 10e3ff1 append GPL

# 2留美、暫時(shí)沒(méi)有之前的commit id:
$ git reflog
--->
10e3ff1 (HEAD -> master) HEAD@{0}: reset: moving to 10e3ff
98f6552 HEAD@{1}: reset: moving to HEAD^
10e3ff1 (HEAD -> master) HEAD@{2}: commit: append GPL
98f6552 HEAD@{3}: commit: add distributed
37424cf HEAD@{4}: commit (initial): wrote a readme.txt
↓
↓
↓
$ git reset --hard 10e3ff
--->
HEAD is now at 10e3ff1 append GPL

  1. 撤回修改
    a. 文件修改后反悔了,但這時(shí)文件還沒(méi)有git add渣聚,需要撤回
$ git checkout -- readme.txt  #把readme.txt文件在工作區(qū)的修改全部撤銷,結(jié)果是回到和版本庫(kù)一模一樣的狀態(tài)独榴;

b. 修改的文件已經(jīng)git add,但還沒(méi)有git commit奕枝,需要撤回

# 1、先從暫存區(qū)撤回修改
$ git reset HEAD readme.txt
--->
Unstaged changes after reset:
M       readme.txt
↓
↓
↓
# 1.5瓶堕、查看狀態(tài)
$ git status
--->
On branch master
Changes not staged for commit:      #注意not staged
  (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")
↓
↓
↓
# 2隘道、撤回修改到最新的commit狀態(tài)
$ git checkout -- readme.txt

  1. 刪除文件,撤回刪除
    a. 版本庫(kù)的文件已從系統(tǒng)中刪除郎笆,需要在git中確認(rèn)
# 將刪除修改提交到暫存區(qū)
$ git rm test.txt
--->
rm 'test.txt'
↓
↓
↓
# 向git提交確認(rèn)刪除
$ git commit -m 'remove test.txt'
--->
[master c262779] remove test.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 test.txt

b. 版本庫(kù)的文件刪除錯(cuò)誤谭梗,還沒(méi)有git rm,撤回:

$ git checkout -- test.txt

c. 版本庫(kù)的文件刪除錯(cuò)誤宛蚓,已經(jīng)git add``````git commit激捏,撤回:

$ git reset --hard 62adb  #62adb為版本號(hào)(修改記錄號(hào))

  1. 與github建立連接,將本地倉(cāng)庫(kù)推送到github
# 在github創(chuàng)建一個(gè)遠(yuǎn)程倉(cāng)庫(kù)后凄吏,將本地倉(cāng)庫(kù)與之相連接
$ git remote add origin https://github.com/junzhu-github/learngit.git
↓
↓
↓
# 把本地庫(kù)的所有內(nèi)容推送到遠(yuǎn)程庫(kù)上
$ git push -u origin master  #第一次推送時(shí)远舅,要加上了-u參數(shù)
--->
Enumerating objects: 19, done.
Counting objects: 100% (19/19), done.
Delta compression using up to 2 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (19/19), 1.45 KiB | 105.00 KiB/s, done.
Total 19 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
To https://github.com/junzhu-github/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

# 此后,每次本地提交后痕钢,推送最新修改使用:
$ git push origin master

# 查看遠(yuǎn)程庫(kù)的信息
$ git remote
--->
origin

# or 需要更詳細(xì)信息
$ git remote -v
--->
origin  git@github.com:junzhu-github/gitskills (fetch)
origin  git@github.com:junzhu-github/gitskills (push)


  1. 從遠(yuǎn)程庫(kù)克隆
# 在github新建倉(cāng)庫(kù)gitskills后图柏,克隆到本地
$ git clone git@github.com:junzhu-github/gitskills
--->
Cloning into 'gitskills'...
The authenticity of host 'github.com (198.19.0.112)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,198.19.0.112' (RSA) to the list of known hosts.
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

  1. git分支的創(chuàng)建、使用任连、刪除
# 創(chuàng)建并切換到分支
$ git checkout -b dev
--->
Switched to a new branch 'dev'

#equal to
$ git branch dev
$ git checkout dev
--->
Switched to branch 'dev'
↓
↓
↓
# 查看當(dāng)前分支
$ git branch
--->
* dev
  master
↓
↓
↓
# 提交文件修改  # 蚤吹!改變的只是分支上的文件內(nèi)容,master的文件未改變
$ git add README.md

$ git status
--->
On branch dev
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   README.md
↓
↓
↓
# 把dev分支的工作成果合并到master分支上随抠,master文件內(nèi)容改變
$ git merge dev
--->
Updating 482d191..1a83f8d
Fast-forward
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
↓
↓
↓
# 合并完成后裁着,就可以放心地刪除dev分支了
$ git branch -d dev
--->
Deleted branch dev (was 1a83f8d).
↓
↓
↓
# 刪除后,查看branch拱她,就只剩下master分支了
$ git branch
--->
* master
↓
↓
↓
# 切換回master分支
$ git checkout master
--->
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

  1. 忽略特殊文件
    a. 在Git工作區(qū)的根目錄下創(chuàng)建一個(gè)特殊的.gitignore文件二驰,然后把要忽略的文件名填進(jìn)去,Git就會(huì)自動(dòng)忽略這些文件
    b. 把.gitignore也提交到Git
    tips: 使用Windows的童鞋注意了椭懊,如果你在資源管理器里新建一個(gè).gitignore文件诸蚕,它會(huì)非常弱智地提示你必須輸入文件名步势,但是在文本編輯器里“保存”或者“另存為”就可以把文件保存為.gitignore了。

  1. 配置別名
# 增加別名
$ git config --global alias.st status  #--global是針對(duì)當(dāng)前用戶起作用的背犯,如果不加坏瘩,那只針對(duì)當(dāng)前的倉(cāng)庫(kù)起作用
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

# 刪除別名
git config --global --unset alias.ci
查看配置文件
# 當(dāng)前倉(cāng)庫(kù)的local配置文件
$ cat .git/config 

# 用戶配置文件
$ cat .gitconfig
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市漠魏,隨后出現(xiàn)的幾起案子倔矾,更是在濱河造成了極大的恐慌,老刑警劉巖柱锹,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哪自,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡禁熏,警方通過(guò)查閱死者的電腦和手機(jī)壤巷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瞧毙,“玉大人胧华,你說(shuō)我怎么就攤上這事≈姹耄” “怎么了矩动?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)释漆。 經(jīng)常有香客問(wèn)我悲没,道長(zhǎng),這世上最難降的妖魔是什么男图? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任示姿,我火速辦了婚禮,結(jié)果婚禮上享言,老公的妹妹穿的比我還像新娘峻凫。我一直安慰自己,他們只是感情好览露,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布荧琼。 她就那樣靜靜地躺著,像睡著了一般差牛。 火紅的嫁衣襯著肌膚如雪命锄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天偏化,我揣著相機(jī)與錄音脐恩,去河邊找鬼。 笑死侦讨,一個(gè)胖子當(dāng)著我的面吹牛驶冒,可吹牛的內(nèi)容都是我干的苟翻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼骗污,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼崇猫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起需忿,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤诅炉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后屋厘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涕烧,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年汗洒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了议纯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仲翎,死狀恐怖痹扇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溯香,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布浓恶,位于F島的核電站玫坛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏包晰。R本人自食惡果不足惜湿镀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伐憾。 院中可真熱鬧勉痴,春花似錦、人聲如沸树肃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)胸嘴。三九已至雏掠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劣像,已是汗流浹背乡话。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耳奕,地道東北人绑青。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓诬像,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親闸婴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坏挠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354