2019-10-14

Git 工具使用分享

我們工作中或多或少都會使用?Git?作為?Code?分布式版本控制系統(tǒng)墙杯,以下是本人總結(jié)的 Git 常用命令寻馏。

目錄

基本概念

安裝

Windows

Mac

可視化工具?(sourcetree、fork)

配置?(git config / .gitconfig)

忽略文件?(.gitignore / .gitkeep)

倉庫?(git clone / git init / git remote)

分支?(git branch / git checkout)

提交?(git add / git commit / git push)

查看?(git status / git log / git diff / git show)

拉取?(git pull / git fetch)

合并?(git merge)

撤銷/回滾?(git reset)

解決沖突?(git reset)

Tag?(git tag)

Stash?(git stash)

基本概念

工作區(qū)/工作目錄(Workspace/Working Directory): 就是你平時存放項目代碼的目錄筒扒。

暫存區(qū)(Stage/Index):用于臨時存放你的改動激况,事實上它只是一個文件癣防,保存即將提交到文件列表信息, 一般存放在 ".git目錄下" 下的index文件(.git/index)中忌傻,所以我們把暫存區(qū)有時也叫作索引(index)屁置。

倉庫區(qū)/版本庫(Repository/Git Directory):就是安全存放數(shù)據(jù)的位置,這里面有你提交到所有版本的數(shù)據(jù)朗若。其中HEAD指向最新放入倉庫的版本仿吞。

遠程倉庫(Remote Directory):gitee.com

一般文件 Git 操作流程:

通過?vim REDEME.md?更改?工作區(qū)?文件內(nèi)容捡偏。

通過?git add?命令將?工作區(qū)?文件添加到?暫存區(qū)(Index/Stage)?。

通過?git commmit?命令提交到?倉庫區(qū)峡迷。

通過?git push?命令推送到?遠程倉庫银伟。

安裝

Windows

Mac:?brew install git

Git 可視化工具 - 適用于 Mac & Windows 平臺

sourcetree?相比 fork 卡、中文菜單绘搞、Bug?

fork

配置

Git 全局配置, 默認?Git?配置信息存儲在用戶目錄即:?~/.gitconfig?文件中彤避。

git config --global user.name"codezm"git config --global user.email"codezm@163.com"#配置-保存賬號及密碼至本地~/.git-credentials,僅第一次手動錄入賬號及密碼git config --global credential.helper store#配置-全局忽略文件,默認文件不存在自行新建文件即可git config --global core.excludesfile ~/.gitignore# git使用外部工具合并沖突后避免生成多余的.orig備份文件git config --global mergetool.keepBackupfalse#查看Git配置信息夯辖。git config --list

vim ~/.gitconfig

[user]? ? name = codezm? ? email = codezm@163.com[credential]? ? helper =store[core]? ? excludesfile = ~/.gitignore? ? editor = vim[mergetool]? ? keepBackup =false[alias]? ? co = checkout? ? lg = log --graph --pretty=format:'%Cred%h%Creset-%C(yellow)%d%Creset%s%Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

忽略文件

Git 全局忽略規(guī)則配置文件琉预,應用于所有 Git 項目,配置文件路徑可使用命令?git config core.excludesfile?查看 ––– 默認不存在需配置蒿褂。

$ vim `git config core.excludesfile`############################################ OS generated files ############################################.DS_Store.DS_Store?*.swp._*.Spotlight-V100.TrashesIcon?ehthumbs.dbThumbs.db################################################# packages #################################################*.7z*.dmg*.gz*.iso*.jar*.rar*.tar*.zip# Compiled source ####################*.com*.class*.dll*.exe*.o*.so*.pyc# Logs and databases #######################*.log*.sqlite

Git 忽略規(guī)則配置文件:?.gitignore圆米,在單個 Git 項目下創(chuàng)建僅適用于此項目。

#忽略項目中所有l(wèi)og文件夾(/runtime/log啄栓、/log):log#忽略項目根路徑下整個runtime文件夾:/runtime/*#但排除runtime根文件夾下某個文件:!/runtime/wechat-post-data.log#注意:若想排除以下文件是無效的娄帖。# !/runtime/pid/swoole/master.pid#解決方案,這也是`忽略某個文件夾昙楚,但又不想忽略這個文件夾下的某個子目錄`的解決方案近速。!/runtime/pid/runtime/pid/*!/runtime/pid/swoole/runtime/pid/swoole/*!/runtime/pid/swoole/master.pid#檢查UI-Images.zip文件被哪個忽略規(guī)則所匹配:git check-ignore -v /tags/UI-Images.zip#忽略規(guī)則強制添加至Git版本庫:git add -f /tags/UI-Images.zip

.gitkeep?文件的作用

Git 默認是不允許提交一個空目錄到版本庫的,可以在空的文件夾里面建立一個?.gitkeep?文件,然后提交去即可削葱。其實在?Git?中?.gitkeep?就是一個占位符奖亚。

示例: 需要 Git 提交 Yaf -?views?空目錄。

倉庫

基于遠程項目克隆至本地

首先析砸,gitee?創(chuàng)建遠端「 remote 」倉庫: git-demo昔字,然后克隆至本地目錄:

cd~gitclonehttps://gitee.com/codezm/git-demo.git git-democdgit-demo

基于本地項目創(chuàng)建 git 倉庫

cdgit initgit remote add origin https://gitee.com/codezm/git-demo.gitgit add .git commit -m'First commit.'git push origin master

修改本地項目 git 倉庫地址

cdgit remoteset-url origin

分支

新 Git 項目默認 ( git clone ) 所在分支為:?master。

#查看本地所在分支干厚,帶*表示當前所在分支.git branch#查看遠程所有分支# git branch -r#查看所有分支,包含本地和遠程服務器git branch -a#創(chuàng)建分支git branch #示例-于master分支基礎上創(chuàng)建dev分支: git branch dev#創(chuàng)建并檢出至一個新分支git checkout -b #分支切換李滴,切換至dev分支git checkout #刪除本地分支git branch -d #分支重命名# git branch -m <old-branch-name> <new-branch-name>#刪除遠程服務器分支# git push origin --delete <branch-name># git push origin :<branch-name>

注意: 本地分支刪除時需要先切換至其他分支再操作要刪除的分支。

提交

#編輯工作區(qū)項目代碼.echo"test git"> README.md#提交至暫存區(qū).git add README.md#遍歷詢問是否添加-僅限已添加至Git項目文件蛮瞄,新增文件排除所坯。# git add -p#添加工作目錄所有新增/改動文件# git add .#提交至本地倉庫區(qū).git commit -m'Modify README.md'#提交至遠端倉庫-只有提交后他人才可使用你提交的代碼.git push origin master# -u設置origin為默認主機,之后就可以直接使用git push推送至遠程服務器。#默認只推送當前分支: simple方式挂捅。Git 2.0版本之前芹助,默認采用matching方法,會推送所有有對應的遠程分支的本地分支git push -u origin master

查看

查看哪些文件改動了闲先?「?git add?前查看 」

git status

工作區(qū)文件. 「 git 文件差異對比 」

git diff#對比某一文件差異# git diff <file-name>

暫存區(qū)文件:?git add. 「 git 文件差異對比 」

git diff --cached#對比某一文件差異git diff --cached

版本庫文件:?git commit. 「 git 文件差異對比 」

#查看此所有文件更改詳情.git show #示例-僅查看指定文件: git show a09ce4377cd292 README.md#對比兩次的文件更改詳情.# git diff <COMMIT-ID>...<COMMIT-ID> README.md#對比兩次涉及的所有文件名# git diff <COMMIT-ID>...<COMMIT-ID> --name-only

giteem - 對比視圖 | 示例

修改了哪些文件状土?「?git commit?后查看 」

gitlog--stat# git show <COMMIT-ID> --name-only#展示最后一次提交修改的文件# git log --stat -n 1#展示 # git log --oneline

拉取

git fetch 是將遠程主機的最新內(nèi)容(所有遠程倉庫的 branch、tag)拉到本地伺糠,用戶在檢查了以后決定是否合并到工作本機分支中蒙谓。

git pull 則是將遠程主機的最新內(nèi)容拉下來后直接合并,即:git pull = git fetch + git merge训桶。

git pull origin/master# git fetch# git merge origin/master

合并

git checkout dev# git pull有個前提當前分支dev對應遠程分支origin/dev已存在累驮,此處也可使用: git fetchgit pullgit merge origin/kakaguo#若存在沖突則解決完沖突后還需要執(zhí)行以下操作:# git add .# git commit -m ''git push origin dev

撤銷/回滾

#非Git項目管理文件撤銷「刪除」,即:不在git版本控制下的新增文件rm -f README.md#新增文件撤銷git rm --cached NEW_README.md#工作區(qū)文件撤銷「還原」git checkout -- README.md#暫存區(qū)文件撤銷「取消git add操作」git reset HEAD README.md#本地倉庫文件撤銷「取消git commit操作」gitlog##重置HEAD和索引####此時若是又修改了README.md文件再執(zhí)行g(shù)it reset后文件README.md內(nèi)容會展示什么?git reset 等價于git reset --mixed ##重置HEAD、索引和工作區(qū),會重置以下工作區(qū)域文件: -執(zhí)行此操作是危險的舵揭。## 1.對README.md所有操作丟棄.## 2.若工作區(qū)對README.en.md做了修改但未git commit,即使git add到了暫存區(qū)也會被丟棄谤专。git reset --hard #遠程倉庫撤銷:主要用于撤銷已push的commit操作,即git commit -> git push -> git reset -> git push -fgit push -f

沖突解決

分支 hanlu午绳、kakaguo 同時修改?README.md?文件.

git checkout hanluecho'hanlu'> README.mdgit add .git commit -m'Modify README.md by hanlu.'git push -u origin hanlugit checkout kakaguoecho'kakaguo'> README.mdgit add .git commit -m'Modify README.md by kakaguo.'git pushgit checkout devgit pullgit merge origin/hanlugit push origin devgit merge origin/kakaguo#解決沖突git add .git commit -m'Merge kakaguo'git push origin dev#撤銷合并「注意:僅在合并失敗(快速合并失敗被阻止)時執(zhí)行」,以下命令對工作區(qū)代碼無影響:# git reset --merge# git merge --abort

Tag

打標簽置侍、項目版本管理.

#創(chuàng)建Taggit tag #示例-創(chuàng)建1.0.0版本Tag: git tag v1.0.0#顯示所有Taggit tag#加上-l命令可以使用通配符來過濾tag# git tag -l "1.0.*"#給加Tag并添加備注信息.# git tag -a <tag-name> <commit-id> -m <comment-message>#顯示Tag詳情:顯示、Tag備注信息等# git show <tag-name>#推送至遠程倉庫# git push origin <tag-name>#推送本地所有Taggit push origin --tags#切換至某個Tag,與分支類似git checkout #刪除本地某個Tag# git tag -d <tag-name> <tag-name-mores>#刪除遠程倉庫Tag# git push origin --delete tag <tag-name># git push origin :refs/tags/<tag-name>

Stash?- 貯藏

適用場景: 臨時合并他人分支存在 - 同時更改相同文件拦焚、分支可能存在沖突蜡坊。

git stash#保存stash并設置名稱,simple方式: git stash# git stash save <message>#僅還原# git stash apply#刪除指定stash# git stash drop stash@{0}#還原并刪除stash赎败,git stash apply + git stash dropgit stash pop#列出所有stash# git stash list

注意:?git stash pop?如果存在沖突文件將導致?drop?失敗算色。

結(jié)語

每次?git push?前先拉取下?git pull origin master?/?git pull origin dev?代碼。

僅merge部分文件:git rebase -i螟够。

僅stash部分文件:?git stash -p灾梦。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末峡钓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子若河,更是在濱河造成了極大的恐慌能岩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萧福,死亡現(xiàn)場離奇詭異拉鹃,居然都是意外死亡,警方通過查閱死者的電腦和手機鲫忍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門膏燕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悟民,你說我怎么就攤上這事坝辫。” “怎么了射亏?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵近忙,是天一觀的道長。 經(jīng)常有香客問我智润,道長及舍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任窟绷,我火速辦了婚禮锯玛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兼蜈。我一直安慰自己更振,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布饭尝。 她就那樣靜靜地躺著,像睡著了一般献宫。 火紅的嫁衣襯著肌膚如雪钥平。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天姊途,我揣著相機與錄音涉瘾,去河邊找鬼。 笑死捷兰,一個胖子當著我的面吹牛立叛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贡茅,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秘蛇,長吁一口氣:“原來是場噩夢啊……” “哼其做!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赁还,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妖泄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后艘策,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹈胡,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年朋蔫,在試婚紗的時候發(fā)現(xiàn)自己被綠了罚渐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡驯妄,死狀恐怖荷并,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情富玷,我是刑警寧澤璧坟,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站赎懦,受9級特大地震影響雀鹃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜励两,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一黎茎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧当悔,春花似錦傅瞻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饼疙,卻和暖如春溺森,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窑眯。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工屏积, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人磅甩。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓炊林,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卷要。 傳聞我的和親對象是個殘疾皇子渣聚,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 Git使用教程 Git是什么 Git是一個開源的分布式版本控制系統(tǒng)独榴,用于敏捷高效地處理任何或小或大的項目。 ...
    90后的思維閱讀 906評論 0 0
  • git 使用筆記 git原理: 文件(blob)對象饵逐,樹(tree)對象括眠,提交(commit)對象 tree對象 ...
    神刀閱讀 3,773評論 0 10
  • Git 是目前最流行的分布式版本控制系統(tǒng)之一。 版本控制指的是倍权,記錄每次版本變更的內(nèi)容和時間等細節(jié)掷豺,保留各版本之間...
    神齊閱讀 1,427評論 0 7
  • 這篇博文是自己在學習git過程中的思考總結(jié)。本文僅僅代表個人的看法薄声,如有不妥地方還請本文文末留言当船。 ?? 原文鏈接g...
    Ming_Hu閱讀 1,075評論 4 18
  • 學生:張彤伊 給那個陪我玩耍了十三年的女孩子的信 張靖涵: 時間過的好快呀德频,靜下心來慢慢的想一想,時間就像...
    我本為旭閱讀 190評論 0 1