git常規操作【初始化/提交代碼/撤銷/刪除/合并分支/儲存變更】

由于公司一直用的SVN對項目進行版本管理,所以一直也沒怎么接觸過git。雖然我之前有使用碼云私有倉庫管理代碼,但是我對git的操作還停留在git add . git commit -m上。直到最近聽說github的私有倉庫免費了,所以我又抽時間看了下git的基本操作(免費使我進步,哈哈哈~~),下面是我整理的筆記,希望對你有幫助。

基礎部分

初始化git

git init 初始化

檢查狀態

git status 檢測文件狀態(有沒有被追蹤Untracked)
提交到版本庫的文件不會顯示在git status里

GIT四種狀態

untracked 未被追蹤
modified 表示工作區修改了某個文件但是沒有添加到暫存區
staged 表示把工作區修改的文件添加到了暫存區但是沒有比較到版本庫
Commited 表示數據被安全的存儲在本地庫中

GIT三層結構

working directory 工作區
staging index 暫存區
git directory(Repository) 版本庫

提交代碼

git add fileName 追蹤 (從工作區添加到暫存區)
git add . 追蹤全部本地文件到暫存區
git commit -m '描述' 提交到版本庫

告訴git使用者的身份

git config --global user.name yourName
git config --global user.email yourEmail

其他

git config --list 查看git配置情況
git log 查看提交信息(提交人/郵箱)
git help 命令名 (例git help add):將彈出想要查找的命令的文檔

撤銷部分

git add . + git commit -m 'msg == git commit -am 'msg'

例如: git commit -m 'versions 1.0' 提交到版本庫
這時候不能使用 'versions 1.0' 再次提交了 如果還想用這個名字的話 使用↓↓
git commit--amend 撤銷上一次的提交,并將暫存區的文件重新提交 也可以通過這個命令改變版本描述(不改變暫存區內容的情況下)

git checkout -- fileName 編輯器的文件恢復成了修改前的樣子(最后一次提交)
git checkout -- . 撤銷恢復全部文件

git reset HEAD fileName 撤銷提交到暫存區 (這的HEAD為頭指針)
此處HEAD也可以換為版本號(將相應版本里的文件拉回到暫存區)
這一步不會影響工作區↑↑,想工作區恢復 需要使用git checkout -- fileName
Unstaged changes after reset(將改變撤銷暫存);

可以通過git log 查看各種版本的版本號 然后通過版本號恢復到某個版本(這也會改變HEAD的指向)
git reset 版本號(commit后面的) 文件名;
再用git checkout -- fileName 拉回來

刪除部分

git rm fileName:此步操作會把工作區的文件連同暫存區的文件一起被刪除

當工作區的文件或者暫存區的文件被修改后,想進行git rm 操作,git會禁止我們刪除,起到了一個防止誤刪除的作用。
如果想要保留工作區的文件 那么就要用git rm --cached 文件名 來僅僅刪除暫存區的文件
git rm -- cached fileName 在不小心將不需要追蹤的文件添加到暫存區后,想刪除暫存區的文件但是不想刪除工作區的文件很有用
git rm -f fileName 同時刪除工作區和暫存區的文件
mv fileName newFileName 本地(工作區)重命名
mv fileName newFileName 工作區和暫存區都重命名

git指針概念

Git指針
當提交一個版本的時候,就會有一個版本號(V1),這時候有兩個指針指向這個版本,一個是master(當前分支指針),一個是HEAD(指向當前分支的最后一個版本)
當提交了一個新的版本(V2),master指針和HEAD指針都指向了最新一次的提交(V2),V2有一個指針指向V1。這的指針是指(文件中有一塊地方保存著其他文件的地址),調用V2的時候可以直接通過V2找到V1的地址,從而調用V1,以達到方便的訪問V1的目的,以此類推。
如果在V2版本上創建了一個分支(D1)的時候,master分支指針依舊會指向V2,新的D1分支指針會指向新的D1分支,當切換到D1分支的時候,head指針會切換到D1上,此時的D1還有一個指針指向V2。
修改D1分支的時候,D1和head指針也會以此類推到D2。當從D2合并分支到V2的時候,會形成V3分支,V3分支既指向V2分支,又指向D2分支。此時HEAD和master指針指向V3分支。

分支部分

git branch 查看本地分支
git branch -a 查看遠程分支
git branch branchName 創建新分支
git checkout branchName 切換分支
git branch -d branchName 刪除分支 (此操作必須保證當前的分支非想要刪除的那個分支)
git branch -m branchName newBranchName 修改分支名
git checkout -b branchName 創建分支并切換分支

合并分支

首先切換到主分支(master)
git merge branchName 合并分支
這時候如果branch和master在相同位置有不同的修改,也就是發現了沖突的時候,git會拋出一個讓我們來手動解決沖突的錯誤↓↓。
automatic merge failed:fix conflicts and then commit result.(自動合并失敗:修復沖突,然后提交結果。)
<<<HEAD到===之間是master分支的內容
===到>>>branchName 是branchName分支的內容
然后重新git commit -am 'msg' 提交到暫存區及版本庫;

git diff 比較差異(默認比較工作區和暫存區文件的差異) 如果沒有差異是不會有任何展示的
git diff --staged 比較暫存區與版本庫之間的差異
git diff 還可以比較同一個分支中兩個不同的版本之間的差異(在版本回退時非常有用)
版本hash值 最少選擇4個 git默認選擇7個 建議盡量選擇8-10個 這樣才能保證唯一性
git diff branchName 還可以比較兩個分支之間的差異

儲存變更部分

比如在branch分支上進行修改后,切換到master分支,會報一個
please commit your changes or stash them before you switch branches;(請在切換分支之前提交更改或將其隱藏)的錯誤,我們使用
git stash 暫存工作區的修改,然后git會幫我們自動切換到修改前的狀態
這時切換分支就不會報錯了,因為git在進行分支切換的時候,主要改變的是版本庫,當工作區有改變的時候,會直接將工作區的改變覆蓋到另外一個分支上,從而影響另外一個分支。如果我們使用git stash進行封存,git就會自動將工作區的改變撤銷掉,回到修改前的狀態(上一次提交后的狀態)。
git stash list 查看當前保存了哪些本地文件
git stash apply stash@{0} 返回之前用git stash封存的改變
stash@{0} 里面的0根據提交git stash的次數以此類推
git stash pop stash@{0} 拉回到暫存區和本地
此時再執行 git stash list 查看封存的文件時 stash@{0}不見了
也就是說 git stash pop stash@{0} 是在git stash apply stash@{0}的基礎上,增加了一個刪除命令。
也就是說,返回的同時,刪除git stash中的這個文件的命令。
git stash drop stash@{0} 刪除封存的修改。
綜上 git stash pop stash@{0} = git stash apply stash@{0} + git stash drop stash@{0}

使用遠程倉庫管理代碼(github/碼云)

git push 遠程倉庫地址 (分支:可不填) :推送到遠程倉庫
git pull
如果使用ssh地址
在管理員賬戶使用 ssh-keygen 生成密鑰 文檔后綴為File的為私鑰 后綴為PUB(public的縮寫) File為公鑰
然后點擊github→setting→SSH→New SSH key→輸入標題/添加公鑰;
此時就可以用SSH地址拉取了

推代碼到遠程倉庫:

// 方法1: 
git push git@github.com:倉庫名稱(name/xxx.com.git)
// 方法2: 
git push 倉庫地址(https://github.com/name/xxx.com.git)
// 方法3: 
git remote add origin(倉庫名 通常使用origin) git@github.com:倉庫名稱(name/xxx.com.git);

git remote -v 查看添加的遠程倉庫
然后使用 git push origin master 推送到遠程倉庫

git pull 倉庫名 分支名(master) 拉取到本地

讓git不追蹤指定文件

如果有一些文件不想讓git對它追蹤
touch .gitignore : 在項目目錄下建立一個 .gitignore文件
vim .gitignore 編輯這個文件
然后把想忽略的文件添加到cmd命令行
或者可以 index.* :忽略所有以index.為開頭的文件(支持glob規則)
也可以在里面加上.gitignore 讓他忽略.gitignore文件
glob規則:
(*號)匹配零或多個任意字符
[abc]匹配任何一個列在方括號中的字符
(?號)只匹配一個任意字符
[0-9]/[a-z]匹配范圍

已經長傳到暫存區/版本庫的想忽略的文件,可以:
git rm index.html --cached 刪除暫存區的文件
任何再提交 git commit -m 'msg 提交↑的操作:這時,提交的還是暫存區的文件,本地仍然是改變這個index.html,這個改變并沒有提交到暫存區,更沒有到版本庫
只有將暫存區里相應文件刪除后,忽略才生效 ~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容

  • 簡介 Git是一個開源的分布式版本控制系統,用于敏捷高效地處理任何或小或大的項目。 Git 與常用的版本控制工具 ...
    閩越布衣閱讀 2,770評論 0 18
  • git 使用筆記 git原理: 文件(blob)對象,樹(tree)對象,提交(commit)對象 tree對象 ...
    神刀閱讀 3,794評論 0 10
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,699評論 9 163
  • Git簡明教程 1. git四大域 git四大域:工作目錄,暫存區,倉庫,遠程倉庫。git對文件的操作都是在四大域...
    lavor閱讀 11,086評論 27 435
  • 這篇博文是自己在學習git過程中的思考總結。本文僅僅代表個人的看法,如有不妥地方還請本文文末留言。 ?? 原文鏈接g...
    Ming_Hu閱讀 1,103評論 4 18