[TOC]簡(jiǎn)書(shū)什么時(shí)候才能支持目錄啊逻谦。掌实。。邦马。贱鼻。宴卖。。邻悬。症昏。。父丰。
Git學(xué)習(xí)整理
更新2019-8-22
學(xué)習(xí)自
極客時(shí)間-玩轉(zhuǎn)Git三劍客
Git官網(wǎng)
猴子都能懂得git入門(mén)
安裝Git
Windows打開(kāi)Git Bash
輸入git --version
查看當(dāng)前安裝git版本信息肝谭,如果是Mac直接打開(kāi)命令行輸入git --version
。
Git最小配置
git config --global user.name "dongdong.wu"
git config --global user.email "withwudongdong@gmail.com"
git config --global color.ui auto
config的三個(gè)作用域
git config --local //只針對(duì)某個(gè)倉(cāng)庫(kù)
git config --global //針對(duì)當(dāng)前用戶(hù)所有倉(cāng)庫(kù)
git config --system //針對(duì)當(dāng)前系統(tǒng)所有登錄的用戶(hù)
顯示config的配置信息
git config --list
git config --list --local
git config --list --global
git config --list --system
也可以查看當(dāng)前用戶(hù)下的.gitconfig
即
cd
cat .gitconfig
創(chuàng)建Git倉(cāng)庫(kù)
//1.創(chuàng)建一個(gè)新項(xiàng)目
mkdir GitTest
//2.初始化該項(xiàng)目
cd GitTest
git init //執(zhí)行完成后蛾扇,提示Initialized empty Git repository in C:/Users/Thor/Desktop/GitTest/.git/
//3.查看是否初始化項(xiàng)目成功攘烛,用下面命令可以看到一個(gè).git文件表示初始化成功
ls -al
提交認(rèn)知
一般我們自己本地git在提交分為3個(gè)區(qū)域:
- 我們自己的工作目錄
-
git add files
之后文件進(jìn)入的暫存區(qū) -
git commit
之后文件進(jìn)入的版本歷史
如果有遠(yuǎn)程倉(cāng)庫(kù),給Git正在的區(qū)域分布為下面四個(gè)區(qū)域:
- Workspace:工作區(qū)
- Index / Stage:暫存區(qū)
- Repository:倉(cāng)庫(kù)區(qū)(或本地倉(cāng)庫(kù))
- Remote:遠(yuǎn)程倉(cāng)庫(kù)
下面圖片來(lái)源為:常用 Git 命令清單
在GitTest添加四個(gè)文件
-
touch one.txt two.txt three.txt
創(chuàng)建三個(gè)文件镀首,然后用ls
查看當(dāng)前目錄下是否有這四個(gè)文件坟漱。 -
mkdir four
創(chuàng)建一個(gè)文件夾,進(jìn)入文件夾cd four
更哄,創(chuàng)建一個(gè)文件touch four_dir_one.txt
這樣之后我們的四個(gè)文件都創(chuàng)建好了芋齿。
查看當(dāng)前工作目錄與暫存區(qū)的關(guān)系
git status
,輸入當(dāng)前命令可以看到下面提示竖瘾。
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
fourDir/
one.txt
three.txt
two.txt
nothing added to commit but untracked files present (use "git add" to track)
告訴我們下面這四個(gè)文件git從來(lái)沒(méi)有管理過(guò)沟突,那怎么可以管理呢?可以看到上面提示中已經(jīng)給出我們答案了git add 文件
就可以添加管理了捕传。
git add
命令簡(jiǎn)單介紹
git add [file]
:將文件添加進(jìn)暫存區(qū)git add [file1] [file2] ...
:將多個(gè)文件添加進(jìn)暫存區(qū)git add -u
:將文件的修改、文件的刪除扩劝,添加到暫存區(qū)庸论。git add .
:將文件的修改,文件的新建棒呛,添加到暫存區(qū)聂示。git add -A
:將文件的修改,文件的刪除簇秒,文件的新建鱼喉,添加到暫存區(qū)。git add -u
以及他們之間的區(qū)別
git add -A
相對(duì)于git add -u
命令的優(yōu)點(diǎn) : 可以提交所有被刪除趋观、被替換扛禽、被修改和新增的文件到數(shù)據(jù)暫存區(qū),而git add -u
只能操作跟蹤過(guò)的文件
git add -A
等同于git add -all
git add *Controller
:將以Controller結(jié)尾的文件的所有修改添加到暫存區(qū)git add Hello*
:將所有以Hello開(kāi)頭的文件的修改添加到暫存區(qū) 例如:HelloWorld.txt,Hello.java,HelloGit.txt ...git add Hello?
:將以Hello開(kāi)頭后面只有一位的文件的修改提交到暫存區(qū) 例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不會(huì)被添加的
簡(jiǎn)單的例子
git add 可以直接后面加多個(gè)文件或文件夾
-
添加一個(gè)文件方式
thor@tiantian:~/Documents/GitTest$ git add one.txt thor@tiantian:~/Documents/GitTest$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: one.txt Untracked files: (use "git add <file>..." to include in what will be committed) fourDir/ three.txt two.txt
-
添加多個(gè)文件
thor@tiantian:~/Documents/GitTest$ git add two.txt fourDir/ thor@tiantian:~/Documents/GitTest$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: fourDir/four_dir_one.txt new file: one.txt new file: two.txt Untracked files: (use "git add <file>..." to include in what will be committed) three.txt
-
添加所有新建的
thor@tiantian:~/Documents/GitTest$ git add . thor@tiantian:~/Documents/GitTest$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: fourDir/four_dir_one.txt new file: one.txt new file: three.txt new file: two.txt
進(jìn)行一次commit操作
git commit
命令
thor@tiantian:~/Documents/GitTest$ git commit -m "add four files"
[master (root-commit) b989dc2] add four files
4 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 fourDir/four_dir_one.txt
create mode 100644 one.txt
create mode 100644 three.txt
create mode 100644 two.txt
git diff
命令簡(jiǎn)單介紹
-
git diff
比較的是工作區(qū)和暫存區(qū)的差別 -
git diff --cached
比較的是暫存區(qū)和版本庫(kù)的差別 -
git diff HEAD
可以查看工作區(qū)和版本庫(kù)的差別
git commit
命令簡(jiǎn)單介紹
-
git commit -m [message]
:提交暫存區(qū)到倉(cāng)庫(kù)區(qū) -
git commit [file1] [file2] ... -m [message]
:提交暫存區(qū)的指定文件到倉(cāng)庫(kù)區(qū) -
git commit -a
:提交工作區(qū)自上次commit之后的變化皱坛,直接到倉(cāng)庫(kù)區(qū) -
git commit -v
:提交時(shí)顯示所有diff信息 -
git commit --amend -m [message]
:使用一次新的commit编曼,替代上一次提交。如果代碼沒(méi)有任何新變化剩辟,則用來(lái)改寫(xiě)上一次commit的提交信息 -
git commit --amend [file1] [file2] ...
: 重做上一次commit掐场,并包括指定文件的新變化
查看一下提交記錄
git log
命令查看一下當(dāng)前提交記錄
thor@tiantian:~/Documents/GitTest$ git log
commit b989dc26fa089d76de381ace2e360d69ab60e9ea (HEAD -> master)
Author: dongdong.wu <withwudongdong@gmail.com>
Date: Sun Mar 17 14:49:31 2019 +0800
add four files
git log
命令簡(jiǎn)單介紹
具體可以查看Git官網(wǎng)查看往扔,下面我就簡(jiǎn)單列舉我用過(guò)的。官網(wǎng)地址
-
git log
:會(huì)按提交時(shí)間列出所有的更新熊户,最近的更新排在最上面-
添加參數(shù)
-n
:顯示最近提交n次記錄萍膛。如git log -1
顯示最近提交的一次記錄thor@tiantian:~/Documents/GitTest$ git log -1 commit 218dc3bf854ae9f21c335d45c7370a9d3bb5ebb3 (HEAD -> master) Author: dongdong.wu <withwudongdong@gmail.com> Date: Sun Mar 17 19:47:08 2019 +0800 mv one.txt to one.md
添加參數(shù)
--since, --after
:僅顯示指定時(shí)間之后的提交。時(shí)間格式:比如說(shuō)具體的某一天(“2008-01-15”)嚷堡,或者是多久以前(“2 years 1 day 3 minutes ago”)蝗罗。如git log --after="2019.3.17"
顯示2019年3月17日之后提交的添加參數(shù)
--until, --before
:僅顯示指定時(shí)間之前的提交。添加參數(shù)
--author
:僅顯示指定作者相關(guān)的提交麦到。如:git log --author="dongdong.wu"
添加參數(shù)
--committer
:僅顯示指定提交者相關(guān)的提交绿饵。如:git log --committer="dongdong.wu"
添加參數(shù)
-p
:展開(kāi)顯示每次提交的內(nèi)容差異。如git log -p -1
顯示最近一次提交的變化差異瓶颠。該選項(xiàng)除了顯示基本信息之外拟赊,還在附帶了每次 commit 的變化。當(dāng)進(jìn)行代碼審查粹淋,或者快速瀏覽某個(gè)搭檔提交的 commit 的變化的時(shí)候吸祟,這個(gè)參數(shù)就非常有用了。添加參數(shù)
--stat
:僅顯示簡(jiǎn)要的增改行數(shù)統(tǒng)計(jì)-
添加參數(shù)
--pretty
:可以指定使用完全不同于默認(rèn)格式的方式展示提交歷史- 一般用的參數(shù)
--pretty:format"一些參數(shù)具體看官網(wǎng)參數(shù)說(shuō)明"
桃移。例如:$ git log --pretty=format:"%h - %an, %ar : %s"
- 一般用的參數(shù)
-
添加參數(shù)
--oneline
:--pretty=oneline --abbrev-commit
的簡(jiǎn)化用法屋匕。同時(shí)可以獲得最短的CommitIdthor@tiantian:~/Documents/GitTest$ git log --oneline 218dc3b (HEAD -> master) mv one.txt to one.md b989dc2 add four files
添加參數(shù)
--graph
:顯示 ASCII 圖形表示的分支合并歷史。
-
至此一次簡(jiǎn)單的git提交就完成了借杰。
git修改文件名稱(chēng)
第一種笨方法
# 第一步查看當(dāng)前文件夾下有哪些文件
thor@tiantian:~/Documents/GitTest$ ls
fourDir one.txt three.txt two.txt
# 第二步过吻,我要把one.txt 重名了為 one.md
thor@tiantian:~/Documents/GitTest$ mv one.txt one.md
# 第三步 看本地文件是否重命名成功
thor@tiantian:~/Documents/GitTest$ ls
fourDir one.md three.txt two.txt
# 第四步 把新改的文件添加到暫存區(qū)
thor@tiantian:~/Documents/GitTest$ git add one.md
# 第五步 刪除原來(lái)暫存區(qū)中的文件,即one.txt
thor@tiantian:~/Documents/GitTest$ git rm one.[按兩下TAB鍵會(huì)有下面提示]
one.md one.txt
thor@tiantian:~/Documents/GitTest$ git rm one.txt
rm 'one.txt'
# 第六步 查看當(dāng)前暫存區(qū)蔗衡,可以可看到提示就是 renamed: one.txt -> one.md
thor@tiantian:~/Documents/GitTest$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: one.txt -> one.md
第二種方法(推薦)
因?yàn)槭褂昧说谝环N方法文件名已經(jīng)被改變了纤虽,所以我們要先恢復(fù)到原來(lái)版本狀態(tài)。首先先用
git reset --hard
命令重置暫存區(qū)與工作區(qū)绞惦,與上一次commit保持一致逼纸。然后通過(guò)
git status
可以看到改變的都被取消了。在通過(guò)ls
命令可以看到文件名被恢復(fù)原來(lái)樣子了济蝉。-
現(xiàn)在我們就通過(guò)一個(gè)簡(jiǎn)單命令實(shí)現(xiàn)第一種方法杰刽。
git mv one.txt one.md
就可以實(shí)現(xiàn)第一種方法效果thor@tiantian:~/Documents/GitTest$ git mv one.txt one.md thor@tiantian:~/Documents/GitTest$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: one.txt -> one.md thor@tiantian:~/Documents/GitTest$ ls fourDir one.md three.txt two.txt
-
提交變更
thor@tiantian:~/Documents/GitTest$ git commit -m "mv one.txt to one.md" [master 218dc3b] mv one.txt to one.md 1 file changed, 0 insertions(+), 0 deletions(-) rename one.txt => one.md (100%) thor@tiantian:~/Documents/GitTest$ git log commit 218dc3bf854ae9f21c335d45c7370a9d3bb5ebb3 (HEAD -> master) Author: dongdong.wu <withwudongdong@gmail.com> Date: Sun Mar 17 19:47:08 2019 +0800 mv one.txt to one.md commit b989dc26fa089d76de381ace2e360d69ab60e9ea Author: dongdong.wu <withwudongdong@gmail.com> Date: Sun Mar 17 14:49:31 2019 +0800 add four files
git rm
命令簡(jiǎn)單介紹
-
git rm [file1] [file2] ...
: 刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū) -
git rm --cached [file]
:停止追蹤指定文件王滤,但該文件會(huì)保留在工作區(qū)
git reset
命令簡(jiǎn)單介紹
-
git reset --hard
:重置暫存區(qū)與工作區(qū)贺嫂,與上一次commit保持一致 -
git reset --hard HEAD^
:用HEAD
表示當(dāng)前版本,上一個(gè)版本就是HEAD^
淑仆,當(dāng)然往上100個(gè)版本寫(xiě)100個(gè)^
比較容易數(shù)不過(guò)來(lái)涝婉,所以寫(xiě)成HEAD~100
。 -
git reset --hard [commit-id]
:commitId可以通過(guò)git log --graph --oneline
獲取的commitId就是最短的id
git branch
命令簡(jiǎn)單介紹
一般用于分支的操作蔗怠,比如創(chuàng)建分支墩弯,查看分支等等吩跋。
因?yàn)楝F(xiàn)有項(xiàng)目還未有分支用我當(dāng)前項(xiàng)目下來(lái)展示一下。
-
git branch
:列出本地已經(jīng)存在的分支渔工,并且在當(dāng)前分支的前面用"*"標(biāo)記dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev) $ git branch * dev develop master
-
git branch -r
:查看遠(yuǎn)程版本庫(kù)分支列表dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev) $ git branch -r origin/HEAD -> origin/master origin/develop origin/master origin/release-1.0.2 origin/release-1.0.4
-
git branch -a
:查看所有分支列表锌钮,包括本地和遠(yuǎn)程dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev) $ git branch -a * dev develop master remotes/origin/HEAD -> origin/master remotes/origin/develop remotes/origin/master remotes/origin/release-1.0.2 remotes/origin/release-1.0.4
-
git branch [branch-name]
:新建一個(gè)分支,但依然停留在當(dāng)前分支thor@tiantian:~/Documents/GitTest$ git branch * master thor@tiantian:~/Documents/GitTest$ git branch test thor@tiantian:~/Documents/GitTest$ git branch -v * master 218dc3b mv one.txt to one.md test 218dc3b mv one.txt to one.md
-
git branch [branch-name] [commit-id]
:新建一個(gè)分支引矩,指向指定committhor@tiantian:~/Documents/GitTest$ git branch * master test thor@tiantian:~/Documents/GitTest$ git log --oneline 218dc3b (HEAD -> master, test) mv one.txt to one.md b989dc2 add four files thor@tiantian:~/Documents/GitTest$ git branch commitBranch b989dc2 thor@tiantian:~/Documents/GitTest$ git branch -v commitBranch b989dc2 add four files * master 218dc3b mv one.txt to one.md test 218dc3b mv one.txt to one.md
-
git branch -d [branch-name]
:刪除分支梁丘,如果在分支中有一些未merge的提交,那么會(huì)刪除分支失敗旺韭,此時(shí)可以使用git branch -D dev:強(qiáng)制刪除dev分支
氛谜。thor@tiantian:~/Documents/GitTest$ git branch -v * master 218dc3b mv one.txt to one.md test 218dc3b mv one.txt to one.md thor@tiantian:~/Documents/GitTest$ git branch -d test Deleted branch test (was 218dc3b). thor@tiantian:~/Documents/GitTest$ git branch -v * master 218dc3b mv one.txt to one.md
-
刪除遠(yuǎn)程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
-
git branch -v
:可以查看本地分支dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev) $ git branch -v * dev ea08ab9 上傳憑證添加撥打電話(huà)功能 develop ea08ab9 上傳憑證添加撥打電話(huà)功能 master bd017d3 正式版本號(hào)變更1.0.4.5
-
git branch -vv
:可以查看本地分支對(duì)應(yīng)的遠(yuǎn)程分支dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev) $ git branch -vv * dev ea08ab9 上傳憑證添加撥打電話(huà)功能 develop ea08ab9 [origin/develop] 上傳憑證添加撥打電話(huà)功能 master bd017d3 [origin/master] 正式版本號(hào)變更1.0.4.5
-
git branch -m oldName newName
:給分支重命名。thor@tiantian:~/Documents/GitTest$ git branch * master thor@tiantian:~/Documents/GitTest$ git branch test1 thor@tiantian:~/Documents/GitTest$ git branch -v * master 218dc3b mv one.txt to one.md test1 218dc3b mv one.txt to one.md thor@tiantian:~/Documents/GitTest$ git branch -m test1 test thor@tiantian:~/Documents/GitTest$ git branch -v * master 218dc3b mv one.txt to one.md test 218dc3b mv one.txt to one.md
2. Git checkout
1. 操作文件 2. 操作分支
2.1 操作文件
2.1.1 git checkout filename 放棄單個(gè)文件的修改
2.1.2 git checkout . 放棄當(dāng)前目錄下的修改
2.2 操作分支
2.2.1 git checkout master 將分支切換到master
2.2.2 git checkout -b master 如果分支存在則只切換分支区端,若不存在則創(chuàng)建并切換到master分支值漫,repo start是對(duì)git checkout -b這個(gè)命令的封裝,將所有倉(cāng)庫(kù)的分支都切換到master织盼,master是分支名杨何,
2.3 查看幫助
git checkout --help
當(dāng)然git checkout還有許多命令,但這些已經(jīng)能滿(mǎn)足我們?nèi)粘i_(kāi)發(fā)所需