1.安裝Git
git-scm.com/book/zh/v2 安裝地址
通過 git --version 來查看版本(是否安裝成功)
/*
*命令行的簡單命令
*/
pwd // 當(dāng)前工作的路徑(linux上的命令dir是window)
tree // 查看樹狀結(jié)構(gòu)圖
rd //刪除文件夾
type nul>文件名稱 //創(chuàng)建文件
echo 內(nèi)容 > 寫入文件路徑
del //刪除文件
2.使用Git之前需要做的最小配置
配置 user 信息
配置 user.name 和 user.email
git config --global user.name '用戶名'
git config --global user.name '郵箱'
/*
*config 的三個作用域
* ----------省略等同于local-----------
* $ git config --local // local 只對某個倉庫有效
* $ git config --global // global 對當(dāng)前用戶所有倉庫有效
* $ git config --system // system 對系統(tǒng)所有登錄的用戶有效
*.......................
*--------顯示 config 的配置历极,加上--list --------
* $ git config --list --local
* $ git config --list --global
* $ git config --list --system
*/
3.建Git倉庫
兩種場景:
1.把已有的項目代碼納入Git管理
cd 項目代碼所在的文件夾
git init
2.新建的項目直接用Git管理
cd 某個文件夾
git init your_project //會在當(dāng)前目錄下創(chuàng)建和項目名稱同名的文件夾作為倉庫
cd your_project
通過實踐得出local的優(yōu)先級要比global高(限于他倆之間)
4.工作區(qū)和暫存區(qū)
$ git add //后面可以跟多個文件
$ git commit -m '版本描述' //添加到版本庫
$ git add -u //把git已經(jīng)管理的文件一起提交到暫存區(qū)
$ git status // 查看git當(dāng)前狀態(tài)
$ git log // 查看git的日志
建議把寫好的文件(git add)放到暫存區(qū)浮毯,把為一個目的的所有文件生成一個commit提交到版本庫
5.給文件重命名的簡便方法
$ mv readme readme.md //檢查狀態(tài)會給你提示
$ git add readme.md
$ git rm readme // git很智能會認為我們在重命名
///////////簡便寫法/////////
$ git mv readme readme.md //git提供的重命名
-------
$ git reset --hard //此項命令比較危險會清空暫存區(qū)所有的操作(進行復(fù)原)
6.通過git log查看版本演變歷史
$ git log --oneline //簡潔的查看commit的列表
$ git log -n4 // -n[val]代表查看最近的幾次歷史可以和--oneline 配合使用
$ git branch -v //查看本地有多少的分支
$ git log --all //查看所有分支的版本(默認是查看當(dāng)前分支的)
$ git log --all --graph // 圖形化的查看
7.通過圖形界面工具來查看版本歷史
$ gitk //查看版本歷史圖形化
8.探秘.git目錄
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2020/1/31 23:49 hooks
d----- 2020/1/31 23:49 info
d----- 2020/2/1 15:36 logs
d----- 2020/2/1 16:12 objects
d----- 2020/1/31 23:49 refs
-a---- 2020/2/1 16:12 22 COMMIT_EDITMSG
-a---- 2020/1/31 23:49 130 config
-a---- 2020/1/31 23:49 73 description
-a---- 2020/2/1 20:13 216 gitk.cache
-a---- 2020/1/31 23:49 23 HEAD
-a---- 2020/2/2 0:51 466 index
HEAD //文件告訴我們現(xiàn)在工作在哪個分支上(這是個引用指向refs)
config //里面放的是配置信息(用戶名和郵箱)
refs // 它里面包含heads tags
----------
refs => heads 里面放的是你創(chuàng)建的分支(多人協(xié)作開發(fā)會創(chuàng)建很多分支)
refs => tags //里面放的是你標(biāo)記的tags揽祥,指向commit。
objects //里面有很多松散的文件及刻,git會自我梳理,把過多的文件打包放在pack里淳衙。
// **git 中有tree的概念**
// 在git眼里只要內(nèi)容相同就是唯一的一個blob
/*
*d----- 2020/2/1 16:12 ca
*d----- 2020/2/1 15:36 ee
*d----- 2020/2/1 15:36 ef
*d----- 2020/1/31 23:49 info
*d----- 2020/1/31 23:49 pack
* // 根據(jù)git cat-file -t ca(兩位文件名和里面的編碼信息可以檢測出來類型)
*/
===============
$ git cat-file -t 跟編碼 //檢查類型
$ git cat-file -p //根據(jù)對象的類型顯示其內(nèi)容
9.commit巢寡、tree、blob三個對象之間的關(guān)系
一個commit對應(yīng)著一個tree夸楣。一個tree下面包含著tree和blob宾抓。
10.分離頭指針情況下的注意事項
detached HEAD // 分離頭指針
分離頭指針是指你目前正在工作于沒有分支的情況下,你可以繼續(xù)做開發(fā)豫喧,但是如果偶爾有一天你切換分支工作石洗,沒有和分支掛鉤的文件會被git清理掉。(好處是你想做嘗試開發(fā)時可以使用紧显,如果感覺不好直接切換分支不用理會)
- 如果變更的很重要一定要和分支綁定在一起
進一步理解 HEAD 和 branch
// 查看兩個commit的區(qū)別
$ git diff 編號 編號
$ git diff HEAD HEAD^1 // 每次加^1代表他的父級~1一樣^^
11.刪除不需要的的分支
使用
git branch -d (branch-name)
// 如果刪除不掉用戶在有風(fēng)險把控的情況下可以使用 -D刪除讲衫。
12.怎么修改最新commit的message?
$ git commit --amend //windows打開commit進行修改 esc退出 大寫 ZZ 保存
13.怎么把間隔的幾個commit整理成一個
通過
git rebase -i 編號
最好從他父級 git rebase --root 從跟開始
- 進入后pick為保留的孵班,s為合并的涉兽。后面一個頁面第一行描述一下
14.怎么比較暫存區(qū)和HEAD所含文件的差異
git diff --cached // 把暫存區(qū)的文件和HEAD指向的作比較
15.怎么比較工作區(qū)和暫存區(qū)所含文件的差異?
git diff
//默認就是工作區(qū)和暫存區(qū)比較
git diff -- 文件名
不加文件名是吧工作區(qū)所有的文件和暫存區(qū)作比較
$ git diff [head] [head] -- 文件名
/*
*比較兩個commit的文件區(qū)別
*/
16.如何讓暫存區(qū)恢復(fù)成和HEAD一樣重父?
git reset HEAD
//恢復(fù)暫存區(qū)和HEAD一樣
17.如何讓工作區(qū)的文件恢復(fù)成和暫存區(qū)的一樣
- 如果想變工作區(qū)的內(nèi)容用
checkout
暫存區(qū)用reset
$ git checkout -- 文件名 //把工作區(qū)文件恢復(fù)成暫存區(qū)一樣
18.怎么取消暫存區(qū)部分文件的更改
$ git reset HEAD -- 文件名 //把暫存區(qū)指定文件更改成原來
19.消除最近的幾次提交
$ git reset --hard 指針 // 恢復(fù)到指針的指向
20.正確刪除文件的方法
$ git rm 文件名
21.開發(fā)中臨時加塞了緊急任務(wù)怎么處理花椭?
$ git stash // 先把當(dāng)前未完成任務(wù)放到一塊區(qū)域藏起來,處理緊急任務(wù)
$ git stash list //查看區(qū)域列表
//////取出來有兩種辦法//////
$ git stash apply //取出暫時放的文件房午,不刪除可復(fù)用
$ git stash pop // 取出暫時放的文件矿辽,并刪除
22.如何指定不需要Git管理的文件
.gitignore 文件來配置不受git管理的文件
doc //指定doc文件和文件夾里面的文件不受管理
doc/ //指定doc文件夾以下的文件不受管理
//如果doc和doc/同時存在,但要git管doc文件夾郭厌,不管doc文件袋倔,要怎么設(shè)置呢?
doc
!doc/*
23.如何將Git倉庫備份到本地
啞協(xié)議與智能協(xié)議
直觀區(qū)別: 啞協(xié)議傳輸進度不可見;只能協(xié)議傳輸可見
傳輸速度: 智能協(xié)議比啞協(xié)議傳輸速度要快折柠。
git命令之git remote的基本用法
1.git remote 不帶參數(shù)宾娜,列出已經(jīng)存在的遠程分支
2.git remote -v | --verbose 列出詳細信息,在每一個名字后面列出其遠程url扇售,此時前塔, -v 選項(譯注:此為 –verbose 的簡寫,取首字母),顯示對應(yīng)的克隆地址嚣艇。
3.git remote add url 添加一個遠程倉庫
修改遠程倉庫在本地名稱
git remote rename 已有 變更
24.配置公私鑰
ls -al ~/.ssh
查看是否存在現(xiàn)有的SSH秘鑰
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
生成新SSH秘鑰 。
drwxr-xr-x 1 dell 197121 0 2月 3 16:02 .
drwxr-xr-x 1 dell 197121 0 2月 3 01:24 ..
-rw-r--r-- 1 dell 197121 3381 2月 3 16:02 id_rsa (私鑰)
-rw-r--r-- 1 dell 197121 742 2月 3 16:02 id_rsa.pub (公鑰)
-rw-r--r-- 1 dell 197121 802 5月 1 2019 known_hosts
私鑰留在本地华弓,公鑰配置到公網(wǎng)上
25.把本地倉庫同步到GitHub
git push github --all //全都上傳到遠端
git fetch github 分支 //拉具體分支
git merge -h // 來處理
git merge --allow-unrelated-histories github/master //允許兩個不相關(guān)的分支進行merge
26.不同人修改了不同文件如何處理
先把分支fetch 下來食零,然后merge 。再push寂屏。
27.不同人修改了同文件的不同區(qū)域如何處理
每次做開發(fā)時和遠端同步一下是個好習(xí)慣
git pull
(這個命令執(zhí)行了git fetch 贰谣,git merge)
思路:1.把遠端代碼拉下來進行merge可以執(zhí)行git pull
。這時git會給你報沖突的問題迁霎,需要我們手動解決吱抚。可以利用圖形化考廉,和命令行多種解決方式秘豹。然后git status
查看一下當(dāng)前的狀態(tài),會告訴你確不確定merge 芝此。如果確定git commit -am
最后push憋肖。
28.同時變更了文件名了文件內(nèi)容如何處理(別人還不知道)
遇見這種情況直接
git pull
git會非常智能的幫我們merge因痛。
29.把同一文件改成了不同的文件名如何處理
這種情況依舊用
git pull
看git會不會幫助我們自動merge』槠唬現(xiàn)實是git對于這種情況并不會。他會給我們報文件沖突鸵膏,讓我們自己協(xié)商解決膊升。依次刪除不需要的,添加更改的谭企。
30.Git集成使用的禁忌
- 禁止向集成分支執(zhí)行
push -f
操作
$ git push -f
的危害 會強制干掉一些commit
- 禁止向集成分支執(zhí)行變更歷史的操作
公共的分支是禁止執(zhí)行
git rebase -i
命令的廓译,這樣會破壞歷史。