Git

資料整理

  1. 廖雪峰 JavaScript Python Git 教程
  2. git官方文檔

筆記 摘自上面的資料#

Git 基礎(chǔ)知識(shí)

Git 數(shù)據(jù)的可靠性是靠文件的校驗(yàn)和做到的狭握。
Git 三種狀態(tài): 已提交( committed ) 阴绢、已修改(modified)、已暫存(staged)。
已提交表示數(shù)據(jù)已經(jīng)安全的保存在本地?cái)?shù)據(jù)庫中


工作目錄侣集、暫存區(qū)域以及 Git 倉庫

Git管理版本差異,并不是像其它系統(tǒng)那樣保存一組基本文件和每個(gè)文件雖時(shí)間逐步基類的差異拂共,而是采用快照的形式紊馏。Git在你提交更新或保存項(xiàng)目狀態(tài)時(shí)料饥,對(duì)當(dāng)時(shí)全部文件制作一個(gè)快照并保存這個(gè)快照的索引。如果文件沒有修改朱监,Git不再重新存儲(chǔ)該文件岸啡,而是只保留一個(gè)鏈接,來指向之前存儲(chǔ)的文件赫编。

Git 基礎(chǔ)操作

概念: 倉儲(chǔ)(repertory), 跟蹤(track), 暫存(stage), 提交(commit), 推送(push), 拉取(pull)

獲取Git倉庫

  1. 在工程目錄初始化 Git 倉庫:
$ git init
  1. 追蹤工程文件,并提交:
$ git add *.c
$ git add README
$ git commit -m 'initial project version'
  1. 上傳到GitHub
$ git remote add origin https://github.com/chlq/javaStudy.git
$ ##git remote set-url origin https://github.com/chlq/javaStudy.git
$ git push origin
  1. 克隆現(xiàn)有的倉庫
    當(dāng)你執(zhí)行 git clone 命令的時(shí)候巡蘸,默認(rèn)配置下遠(yuǎn)程 Git 倉庫中的每一個(gè)文件的每一個(gè)版本都將被拉取下來.
    克隆倉庫的命令格式為
$ git clone [url]
$ git clone https://github.com/chlq/XChart
$ $ git clone https://github.com/chlq/XChart myXChart

這會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)名為 “XChart” 的目錄,并在這個(gè)目錄下初始化一個(gè) .git 文件夾
而第二個(gè)名字會(huì)創(chuàng)建 名字為 'myXChart' 的目錄

更新到倉庫

  1. 檢查當(dāng)前文件狀態(tài)
$ git status
位于分支 develop
您的分支與上游分支 'origin/develop' 一致沛慢。
無文件要提交赡若,干凈的工作區(qū)
$ echo 'study how to use git' > studyGit
$ git status
位于分支 develop
您的分支與上游分支 'origin/develop' 一致。
未跟蹤的文件:
 (使用 "git add <文件>..." 以包含要提交的內(nèi)容)
   studyGit
提交為空团甲,但是存在尚未跟蹤的文件(使用 "git add" 建立跟蹤)

未跟蹤(untracked) 意味著 倉庫之前的快照中沒有這個(gè)文件;Git也不會(huì)自動(dòng)降至納入跟蹤范圍,說白了就是在倉庫中是黑戶,未登記.雖然冷凍室里偶爾會(huì)有老鼠, 但是食物登記上可沒有, 管理系統(tǒng)(Git)也不會(huì)主動(dòng)添加上來

  1. 跟蹤新文件
$ git add studyGit
$ git status
位于分支 develop
您的分支與上游分支 'origin/develop' 一致。
要提交的變更:
  (使用 "git reset HEAD <文件>..." 以取消暫存)

    新文件:       studyGit

這時(shí)該文件處于 暫存狀態(tài)( staged); 另外 git add 以目錄為參數(shù),則會(huì)遞歸跟蹤該目錄下的所有文件.

  1. 暫存已修改文件
$ echo 'test' >> CONTRIBUTORS 
$ git status
位于分支 develop
您的分支與上游分支 'origin/develop' 一致黍聂。
要提交的變更:
  (使用 "git reset HEAD <文件>..." 以取消暫存)

    新文件:       studyGit
尚未暫存以備提交的變更:
  (使用 "git add <文件>..." 更新要提交的內(nèi)容)
  (使用 "git checkout -- <文件>..." 丟棄工作區(qū)的改動(dòng))

    修改:         CONTRIBUTORS
$ git add CONTRIBUTORS 
$ git status
位于分支 develop
您的分支與上游分支 'origin/develop' 一致躺苦。
要提交的變更:
  (使用 "git reset HEAD <文件>..." 以取消暫存)

    修改:         CONTRIBUTORS
    新文件:       studyGit

git add 應(yīng)當(dāng)利皆為“添加內(nèi)容到下一次提交中”而不是“將一個(gè)文件添加到項(xiàng)目中”. 另外 提交時(shí)只提交暫存區(qū)里的變更,已更改但未暫存的不會(huì)提交.

  1. 其他
$ git status -s ## 簡略信息
M  CONTRIBUTORS
A  studyGit
$ cat .gitignore ## 忽略的文件, 正則表達(dá)式
$ git diff
  1. 提交更新
$ git commit
$ git commit -m "This is a git commit test."
$ git commit -a -m "can commit all file that tracked"

Git - 分支

每次提交對(duì)象會(huì)包含一個(gè)指向上次提交對(duì)象(父對(duì)象)的指針,提交的信息产还,作者及郵箱等匹厘。
分支其實(shí)就是指向其中一個(gè)對(duì)象的指針。

$ git branch testing ##在當(dāng)前所在的提交對(duì)象上創(chuàng)建一個(gè)testing分支指向該對(duì)象脐区。
##一直指向當(dāng)前所在提交對(duì)象的指針叫 HEAD
$ git log --oneline --decorate ## 查看個(gè)分支當(dāng)前的對(duì)象
$ git checkout testing ## 這樣當(dāng)前分支HEAD就切換到testing分支了
$ git log --oneline --decorate
d62d657 (HEAD, origin/develop, origin/HEAD, develop) study git commit you can de
$ touch gittestfile
$ echo "git testing branch" >> gittestfile 
$ git add gittestfile 
$ git commit -a -m 'branch testing'
[testing e077c17] branch testing
 2 files changed, 2 insertions(+)
 create mode 100644 gittestfile
$ git log --oneline --decorate
e077c17 (HEAD, testing) branch testing
d62d657 (origin/develop, origin/HEAD, develop) study git commit you can deal it 
$ git checkout -b iss53
## 與下面兩條等效
$ git branch iss53
$ git checkout iss53
# git branch -d testing ##刪除分支testing

本地分支合并

分支合并

想要將分支iss53合并到master分支上

$git checkout master
$git merge iss53
$git branch -d iss53
合并后

遠(yuǎn)程分支

阮一峰的網(wǎng)絡(luò)日志-Git遠(yuǎn)程操作詳解
阮一峰老師的日志寫的非常條理清晰易懂
遠(yuǎn)程分支(remote branch)是對(duì)遠(yuǎn)程倉庫中的分支的索引愈诚。遠(yuǎn)程分支本地可以查看但是無法移動(dòng),只有在進(jìn)行網(wǎng)絡(luò)交互時(shí)才會(huì)更新。
當(dāng)你git clone 遠(yuǎn)端Git服務(wù)器里的代碼時(shí)炕柔,Git自動(dòng)將此遠(yuǎn)程倉庫命名為origin, 并建立一個(gè)指向該倉庫master分支的指針: origin/master

# 設(shè)置遠(yuǎn)程倉庫名
$ git clone -o 希望的倉庫名 遠(yuǎn)程git URL
# 通過 git branch 可以查看當(dāng)前本地分支
?   git:(chlq_cases) ? git branch
* chlq_cases
  master
# 通過 git branch -r 查看遠(yuǎn)程分支
? git:(chlq_cases) ? git branch -r 
  origin/HEAD -> origin/master
  origin/chlq_cases
  origin/dev
  origin/master
# 從遠(yuǎn)程分支創(chuàng)建新的本地分支
git checkout -b newBrach origin/master
# 與本地分支合并類似
git merge origin/master # 可以在當(dāng)前本地分支上酌泰,合并origin/master
# 刪除遠(yuǎn)程分支
git branch -r
git branch -r -d origin/xxxx

git remote

$ git remote -v
origin  ssh://git@git.xxx.com/~chenlanqiang/waimai-money-app-uitest.git (fetch)
origin  ssh://git@git.xxx.com/~chenlanqiang/waimai-money-app-uitest.git (push)
$ git remote set-url origin  ssh://git@git.xxx.com/~chenlanqiang/waimai_m_app_uitest_money.git
$ git remote -v
origin  ssh://git@git.sankuai.com/~chenlanqiang/waimai_m_app_uitest_money.git (fetch)
origin  ssh://git@git.sankuai.com/~chenlanqiang/waimai_m_app_uitest_money.git (push)

git fetch

git fetch命令用于從另一個(gè)存儲(chǔ)庫下載對(duì)象和引用。
git refspec 詳解

# 同步 遠(yuǎn)程倉庫 中的數(shù)據(jù) 到 本地
$ git fetch <遠(yuǎn)程倉庫名> 
# 同步 遠(yuǎn)程倉庫 制定分支 的數(shù)據(jù) 到 本地
$ git fetch <遠(yuǎn)程倉庫名> <分支名>
# 同步 遠(yuǎn)程倉庫origin 的master分支 的數(shù)據(jù) 到 本地 origin/master 里
$git fetch origin master 
# git fetch <refspec> 
# Refspec 的格式是一個(gè)可選的 + 號(hào)匕累,接著是 <src>:<dst> 的格式陵刹,這里 <src> 是遠(yuǎn)端上的引用格式, <dst> 是將要記錄在本地的引用格式欢嘿∷ニ觯可選的 + 號(hào)告訴 Git 在即使不能快速演進(jìn)的情況下,也去強(qiáng)制更新它炼蹦。
# +refs/heads/*:refs/remotes/origin/*
git fetch --tags --process ssh://git@git.remote.com/xxx.git +refs/<tag, like heads>/<tag>:refs/remotes/origin/<tag>

git pull

與fetch 不同的是羡宙, git pull 可以指定要更新的本地分支(可以理解為不同代碼版本的指針)
git pull 相當(dāng)于 git fetch + git merge

$ git pull <遠(yuǎn)程倉庫> < 遠(yuǎn)程分支>:<本地分支>
$ git pull origin master:chlq_cases
# 取回遠(yuǎn)程origin倉庫的master分支, 與本地chlq_cases分支合并
# 不加 本地分支掐隐, 則默認(rèn)合并當(dāng)前分支
$ git pull origin master # 等效于下面的兩句
$ git fetch origin
$ git merge origin/master

git push

git push 命令用于將本地分支的更新狗热,推送到遠(yuǎn)程倉庫

$ git push <遠(yuǎn)程倉庫> <本地分支>:<遠(yuǎn)程分支>
# 如果省略 遠(yuǎn)程分支名 默認(rèn)推送到與本地分支有 追蹤關(guān)系的遠(yuǎn)程分支
$ git push origin master
# 省略本地分支, 表示 刪除指定的遠(yuǎn)程分支
$ git push origin :master
# 等同于
$ git push origin --delete master

git tag

git tag 可以將分支上某個(gè)時(shí)間點(diǎn)的代碼打上標(biāo)簽瑟枫,方便代碼版本管理斗搞、代碼回滾等

$##打標(biāo)簽
$git tag -a your-tag-name -m "msg"
$##同步到遠(yuǎn)端倉庫
$git push origin your-tag-name
$##列出說有tag
$git tag -l

追蹤

fork 及 上傳到upstream

勤快學(xué):git教程

撤銷操作

git-撤銷操作

對(duì)commited的文件

$ git reset HEAD <file>...

對(duì)added的文件

$ git checkout -- <file>...

git stash

##簡單實(shí)用
git stash
...
git stash pop
##更復(fù)雜點(diǎn)
git stash save "work in progress for foo feature"
##查看未提交的GIT棧
git stash list
##選擇第幾個(gè)棧
git stash apply stash@{1}

查看log

git-log 文檔

man git-log
# 查看提交記錄
git log
# 查看文件變更
git log --stat

commit dff06bc5535f40c0cbe4df905f69eec4418a056b
Author: 
Date:   Wed Jun 28 22:15:01 2017 +0800

    modify serve host ip and add some cases

 .../TestNotifyPayInfo.java                          |  84 ++++++--------
 .../TestGetSettleBillOrderVoList4PC.java            |  53 +++++++++
 .../TestGetSettleMockAccountFlows.java              | 124 +++++++++++++++++++++
 .../TestQueryAllAccountInfo.java                    |  65 +++++++++++
 src/test/resources-beta/conf/server.properties      |   2 +-
 src/test/resources-test/conf/server.properties      |   2 +-
 6 files changed, 277 insertions(+), 53 deletions(-)

#查看指定commit, 可以看到文件變更,內(nèi)容更改
git show $commitCode

#以作者或提交人查看
git log -p --author=chlq
git log -p --commitor=chlq
#以時(shí)間查看
git log -p --since="2017-06-27" --until="2017-06-28" --author=chlq

回退

git - 代碼回滾

#回退命令:
$ git reset --hard HEAD^         #回退到上個(gè)版本
$ git reset --hard HEAD~3        #回退到前3次提交之前慷妙,以此類推僻焚,回退到n次提交之前
$ git reset --hard commit_id     #退到/進(jìn)到 指定commit的sha碼
#強(qiáng)推到遠(yuǎn)程:
$ git push origin HEAD --force


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市膝擂,隨后出現(xiàn)的幾起案子虑啤,更是在濱河造成了極大的恐慌,老刑警劉巖架馋,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狞山,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡叉寂,警方通過查閱死者的電腦和手機(jī)萍启,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屏鳍,“玉大人勘纯,你說我怎么就攤上這事〉霾t!?“怎么了驳遵?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長山涡。 經(jīng)常有香客問我堤结,道長唆迁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任竞穷,我火速辦了婚禮唐责,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘来庭。我一直安慰自己妒蔚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布月弛。 她就那樣靜靜地躺著肴盏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帽衙。 梳的紋絲不亂的頭發(fā)上菜皂,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音厉萝,去河邊找鬼恍飘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谴垫,可吹牛的內(nèi)容都是我干的章母。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼翩剪,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼乳怎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起前弯,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤蚪缀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后恕出,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體询枚,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年浙巫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了金蜀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡的畴,死狀恐怖廉油,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苗傅,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布班巩,位于F島的核電站渣慕,受9級(jí)特大地震影響嘶炭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逊桦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一眨猎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧强经,春花似錦睡陪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炬称,卻和暖如春汁果,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背玲躯。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工据德, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跷车。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓棘利,卻偏偏與公主長得像,于是被迫代替她去往敵國和親朽缴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子善玫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,456評(píng)論 1 26
  • 1.設(shè)置 初次使用需要設(shè)置姓名和郵箱git config --global user.name "git用戶名"g...
    jrg陳咪咪sunny閱讀 753評(píng)論 0 1
  • 有一些毛病希望你知道 有一些熱忱也希望你知道 茱萸誓斥,是一種常綠帶香的植物只洒。 一味中藥。 茱萸的花語竟是富貴吉祥劳坑、驅(qū)...
    衣錦夜行在人間閱讀 848評(píng)論 0 0
  • 我知道毕谴,25歲,我終于做了一件放肆的事…… 同居距芬,跟一個(gè)認(rèn)識(shí)一個(gè)月的人同居涝开,他說好不會(huì)給我任何名分,連私下里都不會(huì)...
    兜兜的簡書閱讀 273評(píng)論 0 0