Git 常用操作及原理

一酿傍、GitHub 體驗(yàn)

1烙懦、初始化本地git

git init

2、配置用戶名

git config --global user.name "<your nickName>"

3赤炒、配置郵箱

git config --global user.email "<your email address>"

4氯析、查看倉庫狀態(tài)

git status

Tips:支持中文文件名

git config --global core.quotepath false

5、提交本地倉庫

git add .
git commit -m"【Git】[Git 常用操作及原理]"

6莺褒、關(guān)聯(lián)遠(yuǎn)程倉庫

git remote add origin <your git repository address>

7掩缓、保持Github 同步

git pull

如果出現(xiàn)這種情況:
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
 git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> master

解決方式:

git branch --set-upstream-to=origin/master master

如果出現(xiàn)這種情況:
refusing to merge unrelated histories

解決方式:

git pull --allow-unrelated-histories

8、推送到遠(yuǎn)程倉庫

git push -u origin master

Tips:記得去GitHub秘鑰管理那里添加公鑰遵岩,增加寫權(quán)限

* 先從GitHub上初始化倉庫你辣,再clone到本地不會(huì)這么麻煩巡通,clone下來之后配置下用戶名和郵箱就可以用了

9、暫存

10舍哄、合并某個(gè)提交

二宴凉、常用操作

1、分支

1.1 簽出分支

git checkout <branchName>

1.2 切換分支

git checkout <branchName>

1.3 創(chuàng)建分支

git branch <branchName>

1.4 合并分支

git merge <branchName> 
git merge --no-ff -m <branchName> 禁用快速合并(Fast-forward)

1.5 刪除本地分支

git branch -d <branchName>

2表悬、遠(yuǎn)程

2.1 查看遠(yuǎn)程分支信息

git remote -vv 

2.2 刪除遠(yuǎn)程分支

git push origin --delete <branchName>

2.3 推送本地分支到遠(yuǎn)程弥锄,遠(yuǎn)程沒有的話會(huì)自動(dòng)創(chuàng)建

git push origin develop:develop

2.4 新建分支,并刪除蟆沫、推送到 遠(yuǎn)程倉庫:

git checkout -b 1.6.0
git push origin -d release/1.6.0
git push origin 1.6.0:release/1.6.0

3籽暇、tag

Git 主要使用兩種類型的標(biāo)簽:輕量標(biāo)簽(lightweight)與附注標(biāo)簽(annotated)

3.1 輕量標(biāo)簽:

一個(gè)輕量標(biāo)簽很像一個(gè)不會(huì)改變的分支 - 它只是一個(gè)特定提交的引用。(這點(diǎn)與svn不同svn的標(biāo)簽是會(huì)移動(dòng)的)

3.2 附注標(biāo)簽:

是存儲(chǔ)在 Git 數(shù)據(jù)庫中的一個(gè)完整對(duì)象饥追。 它們是可以被校驗(yàn)的图仓;其中包含打標(biāo)簽者的名字、電子郵件地址但绕、日期時(shí)間救崔;還有一個(gè)標(biāo)簽信息;并且可以使用 GNU Privacy Guard (GPG)簽名與驗(yàn)證捏顺。 通常建議創(chuàng)建附注標(biāo)簽六孵,這樣你可以擁有以上所有信息;但是如果你只是想用一個(gè)臨時(shí)的標(biāo)簽幅骄,或者因?yàn)槟承┰虿幌胍4婺切┬畔⒔僦希p量標(biāo)簽也是可用的

3.3 具體用法

4、版本操作

4.1 撤銷(git push 前)

4.1.1 git add 之前

git checkout -- filename來撤銷修改
git checkout -- .

4.1.2 git add 后

git reset HEAD 【filename】不加路勁則回撤全部
git checkout fileName

4.1.3 git commit 后

git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]

soft

git_reset_soft.png

mixed

git_reset_mixed.png

hard

git_reset_hard.png
4.2 回滾(git push 后)

4.2.1 打了tag的

git checkout <tag>

4.2.2 回到當(dāng)前HEAD

git checkout <branch_name>

4.2.3 撤銷指定文件到指定版本

git checkout <commitID> <filename>

4.2.4 刪除最后一次遠(yuǎn)程提交

方式一:使用revert

git revert HEAD 
git push origin master

方式二:使用reset

git reset --hard HEAD^ 
git push origin master -f
  • 二者區(qū)別:

revert是放棄指定提交的修改拆座,但是會(huì)生成一次新的提交主巍,需要填寫提交注釋,以前的歷史記錄都在挪凑;
reset是指將HEAD指針指到指定提交孕索,歷史記錄中不會(huì)出現(xiàn)放棄的提交記錄。

4.2.5 回滾某次提交

git revert commitID

4.2.6 刪除某次提交

git rebase -i "5b3ba7a"^

5躏碳、顯示差異

git diff

5.1 比較工作區(qū)與暫存區(qū)

git diff 不加參數(shù)即默認(rèn)比較工作區(qū)與暫存區(qū)

5.2 比較暫存區(qū)與最新本地版本庫(本地庫中最近一次commit的內(nèi)容)

git diff --cached  [<path>...]

5.3 比較工作區(qū)與最新本地版本庫

git diff HEAD [<path>...]  如果HEAD指向的是master分支搞旭,那么HEAD還可以換成master

5.4 比較工作區(qū)與指定commit-id的差異

git diff commit-id  [<path>...]

5.5 比較暫存區(qū)與指定commit-id的差異

git diff --cached [<commit-id>] [<path>...]

5.6 比較兩個(gè)commit-id之間的差異

git diff [<commit-id>] [<commit-id>]

5.7 使用git diff打補(bǔ)丁

git diff > patch  

patch的命名是隨意的,不加其他參數(shù)時(shí)作用是當(dāng)我們希望將我們本倉庫工作區(qū)的修改拷貝一份到其他機(jī)器上使用菇绵,但是修改的文件比較多肄渗,拷貝量比較大,此時(shí)我們可以將修改的代碼做成補(bǔ)丁咬最,之后在其他機(jī)器上對(duì)應(yīng)目錄下使用 git apply patch 將補(bǔ)丁打上即可.

git diff --cached > patch 是將我們暫存區(qū)與版本庫的差異做成補(bǔ)丁

git diff --HEAD > patch 是將工作區(qū)與版本庫的差異做成補(bǔ)丁

git diff Testfile > patch 將單個(gè)文件做成一個(gè)單獨(dú)的補(bǔ)丁

git apply patch 應(yīng)用補(bǔ)丁翎嫡,應(yīng)用補(bǔ)丁之前我們可以先檢驗(yàn)一下補(bǔ)丁能否應(yīng)用,git apply --check patch 如果沒有任何輸出永乌,那么表示可以順利接受這個(gè)補(bǔ)丁

另外可以使用git apply --reject patch將能打的補(bǔ)丁先打上钝的,有沖突的會(huì)生成.rej文件翁垂,此時(shí)可以找到這些文件進(jìn)行手動(dòng)打補(bǔ)丁

6、日志

git log -n

7硝桩、查看倉庫狀態(tài)

git status

8沿猜、提交

提交到本地代碼庫,一般分兩步:

  • 第一步

    git add .
    
  • 第二步

    git commit -m""
    git commit --amend
    

9碗脊、從遠(yuǎn)程倉庫更新

9.1 拉取

  git fetch

更新git remote 中所有的遠(yuǎn)程倉庫所包含分支的最新commit-id, 將其記錄到.git/FETCH_HEAD文件中

9.2 拉取并自動(dòng)合并

git pull

相當(dāng)于 git fetch和git merge

10啼肩、推送本地提交到遠(yuǎn)程倉庫

git push

11、文件夾 (release)

git checkout -b 1.6.0
git push origin -d release/1.6.0
git push origin 1.6.0:release/1.6.0

12衙伶、處理git庫中untracked files

git clean -nxfd     # 連 gitignore 的untrack 文件/目錄也一起刪掉 (慎用祈坠,一般這個(gè)是用來刪掉編譯出來的 .o之類的文件用的)
git clean -nf       # 刪除 untracked files
git clean -nfd      # 連 untracked 的目錄也一起刪掉

三、原理

1矢劲、暫存區(qū)

理解Git的暫存區(qū)(stage 或 index)如下圖所示赦拘,左側(cè)是工作區(qū)(working directory),右側(cè)是版本庫(Repository)芬沉,每次add某個(gè)文件時(shí)躺同,就會(huì)存放在版本庫的stage,commit后才真正的提交到本地的版本庫中丸逸,默認(rèn)git init時(shí)蹋艺,會(huì)創(chuàng)建一個(gè)master分支,以及一個(gè)指向master的指針Head黄刚。

git_repository.jpeg

四捎谨、Gitlab 服務(wù)器的搭建

  • 待補(bǔ)~
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市憔维,隨后出現(xiàn)的幾起案子涛救,更是在濱河造成了極大的恐慌,老刑警劉巖业扒,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件检吆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凶赁,警方通過查閱死者的電腦和手機(jī)咧栗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門逆甜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虱肄,“玉大人,你說我怎么就攤上這事交煞∮搅” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵素征,是天一觀的道長集嵌。 經(jīng)常有香客問我萝挤,道長,這世上最難降的妖魔是什么根欧? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任怜珍,我火速辦了婚禮,結(jié)果婚禮上凤粗,老公的妹妹穿的比我還像新娘酥泛。我一直安慰自己,他們只是感情好嫌拣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布柔袁。 她就那樣靜靜地躺著,像睡著了一般异逐。 火紅的嫁衣襯著肌膚如雪捶索。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天灰瞻,我揣著相機(jī)與錄音腥例,去河邊找鬼。 笑死箩祥,一個(gè)胖子當(dāng)著我的面吹牛院崇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袍祖,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼底瓣,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蕉陋?” 一聲冷哼從身側(cè)響起捐凭,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凳鬓,沒想到半個(gè)月后茁肠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缩举,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年垦梆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仅孩。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡托猩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辽慕,到底是詐尸還是另有隱情京腥,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布溅蛉,位于F島的核電站公浪,受9級(jí)特大地震影響他宛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜欠气,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一厅各、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧预柒,春花似錦讯检、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至顾翼,卻和暖如春投放,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背适贸。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工灸芳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拜姿。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓烙样,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蕊肥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谒获,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355