git使用

昨天在同事電腦上操作了一把cherry-pick代碼,發(fā)現(xiàn)很多功能不用,就慢慢忘記了,梳理了下流程圖:

git commit --amend ? 前提是沒push

cherry-pick [commit

git branch -r --contains cfc3521a32bd

git ?blame [fiel] 看具體修改

Git使用由淺入深

本地有一個項目桃犬,要使用git管理,在項目的根目錄git init

修改的文件我要添加 使用git add《file》再使用git commit提交到本地

當(dāng)自己寫完一段程序评肆,完成一個功能域醇,看自己修改了哪些東西奋早,使用git status兜粘,

如果想看具體自己修改了哪些绞绒,可以使用git diff《file》

HEAD指向的版本就是當(dāng)前版本拦耐,因此耕腾,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id

·穿梭前杀糯,用git log可以查看提交歷史扫俺,以便確定要回退到哪個版本。

·要重返未來火脉,用git reflog查看命令歷史牵舵,以便確定要回到未來的哪個版本

·d68bbfdHEAD@{0}: commit:

·4a29787HEAD@{1}: commit:宇涵天氣了

·4a0a6fdHEAD@{2}: commit:天氣基本搞完了

·6c0d46aHEAD@{3}: commit:增加fragment及部分文件

·30687b6HEAD@{4}: commit:增加網(wǎng)絡(luò)請求和響應(yīng)處理的類

·f7c8d7bHEAD@{5}: commit:增加了數(shù)據(jù)庫柒啤,和基本的配置

·2acbe01HEAD@{6}: clone: from https://github.com/zh2016hz/coo-weather.git

·(END)

################################

在github上創(chuàng)建一個倉庫,然后進(jìn)到本地的項目中畸颅,使用:

git??clonehttps://github.com/zh2016hz/Mygittest.git

這個完成后担巩,在你的本地項目中會多出一個文件夾:你GitHub上倉庫的名字,然后打開你會發(fā)現(xiàn)比你倉庫中多出一個文件没炒,這里有個隱藏的文件涛癌,需要你現(xiàn)實自己電腦隱藏的文件,全選這幾個文件送火,復(fù)制拳话,粘貼到外面一層目錄,會提示你.gitignore文件是隱藏的不能替換种吸,那你就先把外層的這個文件刪除了弃衍,在替換過去,替換完了把這個剛才多出來的文件夾刪除就好,然后你在本地項目根目錄坚俗,輸入gitbranch就能看到當(dāng)前在master分支上镜盯,你就可以開始了!

.gitignore文件中一般加如下就可以了:

```

/build

/.gradle

/.idea

local.properties

*.iml

*.orig

*.pyc

```

一般我們不在master分支上開發(fā)猖败,新建一個dev分支并把新建的分支推到遠(yuǎn)端

?GitTestgit:(master)?git branch dev

?GitTestgit:(master)?git push origin

這個時候做第一次修改速缆,然后看修改狀態(tài),提交

add是把這些文件都放到寄存區(qū)恩闻,stage然后通過commit提交到默認(rèn)的master分支

第一次修改->?git add?->第二次修改->?git commit

你看艺糜,我們前面講了,Git管理的是修改幢尚,當(dāng)你用git add命令后破停,在工作區(qū)的第一次修改被放入暫存區(qū),準(zhǔn)備提交侠草,但是辱挥,在工作區(qū)的第二次修改并沒有放入暫存區(qū),所以边涕,git commit只負(fù)責(zé)把暫存區(qū)的修改提交了晤碘,也就是第一次的修改被提交了,第二次的修改不會被提交功蜓。

提交后园爷,用git diff HEAD -- readme.txt命令可以查看工作區(qū)和版本庫里面最新版本

現(xiàn)在你有兩個選擇,一是確實要從版本庫中刪除該文件式撼,那就用命令git rm刪掉童社,并且git commit:

$ git rm test.txt

rm 'test.txt'

$ gitcommit-m"remove test.txt"

[master d17efd8] remove test.txt

1file changed,1deletion(-)

deletemode100644test.txt

現(xiàn)在,文件就從版本庫中被刪除了著隆。

另一種情況是刪錯了扰楼,因為版本庫里還有呢呀癣,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:

$git checkout -- test.txt(這個方法其實不行)

git checkout其實是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除弦赖,都可以“一鍵還原”项栏。

小結(jié)

命令git rm用于刪除一個文件。如果一個文件已經(jīng)被提交到版本庫蹬竖,那么你永遠(yuǎn)不用擔(dān)心誤刪沼沈,但是要小心,你只能恢復(fù)文件到最新版本币厕,你會丟失最近一次提交后你修改的內(nèi)容列另。

要克隆一個倉庫,首先必須知道倉庫的地址旦装,然后使用git clone命令克隆页衙。

Git支持多種協(xié)議,包括https同辣,但通過ssh支持的原生git協(xié)議速度最快

################################

git下創(chuàng)建文件夾mkdir創(chuàng)建文件mkfile -n 1024 test.txt???1024是字節(jié)數(shù)

刪除:

rm -rf three20

http://www.flutterstudio.com/internet/2610.html

rm刪除命令拷姿。即remove的縮寫,它后面有兩個參數(shù)旱函。

-r刪除文件夾內(nèi)的子文件夾及內(nèi)容,一般情況下rm只能刪除文件或者空的文件夾描滔。

-f強(qiáng)制刪除參數(shù)

如果需要了解rm命令的更多參數(shù)棒妨。請輸入:man rm

我們創(chuàng)建dev分支,然后切換到dev分支:

$git checkout -b dev創(chuàng)建并切換到這個分支

Switchedto a new branch'dev'

git checkout命令加上-b參數(shù)表示創(chuàng)建并切換含长,相當(dāng)于以下兩條命令:

$git branch dev

$git checkout dev

Switchedto branch'dev'

然后券腔,用git branch命令查看當(dāng)前分支:

$git branch

* dev

master

git branch命令會列出所有分支,當(dāng)前分支前面會標(biāo)一個*號拘泞。

然后纷纫,我們就可以在dev分支上正常提交,比如對readme.txt做個修改陪腌,加上一行:

Creating anewbranch is quick.

然后提交:

$git add readme.txt

$git commit -m"branch test"

[dev fec145a] branch test

1file changed,1insertion(+)

現(xiàn)在辱魁,dev分支的工作完成,我們就可以切換回master分支:

$git checkout master

Switchedto branch'master'

切換回master分支后诗鸭,再查看一個readme.txt文件染簇,剛才添加的內(nèi)容不見了!因為那個提交是在dev分支上强岸,而master分支此刻的提交點并沒有變:

現(xiàn)在锻弓,我們把dev分支的工作成果合并到master分支上:

$git merge dev前提是我要切換到原始分支,這個合并后在本地,蝌箍,還需要推到遠(yuǎn)端青灼,倉庫才能看到改變

Updatingd17efd8..fec145a

Fast-forward

readme.txt |1+

1file changed,1insertion(+)

git merge命令用于合并指定分支到當(dāng)前分支暴心。合并后,再查看readme.txt的內(nèi)容杂拨,就可以看到专普,和dev分支的最新提交是完全一樣的。

注意到上面的Fast-forward信息扳躬,Git告訴我們脆诉,這次合并是“快進(jìn)模式”,也就是直接把master指向dev的當(dāng)前提交贷币,所以合并速度非郴魇ぃ快。

當(dāng)然役纹,也不是每次合并都能Fast-forward偶摔,我們后面會講其他方式的合并。

合并完成后促脉,就可以放心地刪除dev分支了:

$git branch -d dev

Deletedbranch dev (was fec145a).

刪除后辰斋,查看branch,就只剩下master分支了:

$git branch

* master

因為創(chuàng)建瘸味、合并和刪除分支非彻蹋快,所以Git鼓勵你使用分支完成某個任務(wù)旁仿,合并后再刪掉分支藕夫,這和直接在master分支上工作效果是一樣的,但過程更安全枯冈。

小結(jié)

Git鼓勵大量使用分支:

查看分支:git branch

創(chuàng)建分支:git branch

切換分支:git checkout

創(chuàng)建+切換分支:git checkout -b

合并某分支到當(dāng)前分支:git merge

刪除分支:git branch -d

########

git??stash——》git stash pop

1.git config user.name xxxx:(xxxx)

2.git config user.email xxxx@gmail.com:配置自己郵箱

刪除分支:

git branch -d

git ?branch -D

以上的區(qū)別就是d會判斷當(dāng)前分支是否合并毅贮,如果存在沒有合并的,則不允許刪除尘奏,—D就是暴力刪除滩褥,這個要慎用

1.1刪除分支。遠(yuǎn)程:git push origin :test1

1.2刪除本地: git branch -d XX

分支名沒有起好炫加,如何改名字瑰煎?

三部曲:

第一:從本地該分支建一個要重新命名的新分支;

第二:將該分支推送到中央倉庫琢感;

第三:刪除原來的原創(chuàng)分支丢间;

如何在已有的tag上拉取分支:

1.在A項目的tag上,使用git ?branch ?test1??,再git ?branch而不是git ?branch -a能看到新建的分支驹针,然后在git checkout到對應(yīng)的分支上烘挫,再使用git push -u origin test1提交到服務(wù)器,成功后使用git log查看提交,現(xiàn)在在新建的test1分支上拉代碼就好了

基于某個分支拉取分支:git???branch??B??dev

基于tag拉取分支是一樣的

針對多模塊使用git status需要進(jìn)到各個目錄下

在終端control+R可以查詢使用過的命令

比如我輸入:./fmanager pull則比配出./fmanager pull && cd FFProject && pod install

開發(fā)過程中,你可能會遇到有一個tag我不知道他是在那個tag上打的tag ,使用下面的方式:

查找tag所在分支

git branch -r --contains commitid

git branch -r --contains tagname

把本地tag推送到遠(yuǎn)端:git push –tags

git fetch origin tag

Workspace:工作區(qū)Index/Stage:暫存區(qū)Repository:本地倉庫Remote:遠(yuǎn)程倉庫

查看git的配置表#查看當(dāng)前git倉庫配置表

git config --list

#查看全局git倉庫配置表git config --global --list

其實還有一種方式可以初始化倉庫:

1.git init

關(guān)聯(lián)遠(yuǎn)程倉庫:git remote add origingit@10.20.11.218:FFProject/App_Android.git

檢出倉庫

git clone git@10.20.11.218:FFProject/App_Android.git

ignore

將需要加版本記錄的件,進(jìn)ignore操作饮六。需要在倉庫錄下建個.gitignore件(其與.git是平級的)配置語法:

增加/刪除

添加指定件到暫存區(qū)git add [file1] [file2] ...

#添加指定錄到暫存區(qū),包括錄git add [dir]

#添加當(dāng)前錄的所有件到暫存區(qū)git add .

#交互式添加改動到暫存區(qū)git add -p

#刪除作區(qū)件,并且將這次刪除放暫存區(qū)git rm [file1] [file2] ...

#停追蹤指定件,但該件會保在作區(qū)git rm --cached [file]

#重命名名件,并且將這個重命名放暫存區(qū)git mv [file-original] [file-renamed]

提交暫存區(qū)到倉庫區(qū)git commit -m [message]

#提交暫存區(qū)的指定件到倉庫區(qū)git commit [file1] [file2] ... -m [message]

#提交作區(qū)上次commit之后的變化,直接到倉庫區(qū)git commit -am [message]

#提交時顯示所有diff信息git commit -v

#使次新的commit,替代上次提交#如果代碼沒有任何新變化,則來改寫上次commit的提交信息git commit --amend -m [message]

#重做上次commit,并包括指定件的新變化git commit --amend

提交暫存區(qū)到倉庫區(qū)git commit -m [message]

#提交暫存區(qū)的指定件到倉庫區(qū)git commit [file1] [file2] ... -m [message]

#提交作區(qū)上次commit之后的變化,直接到倉庫區(qū)git commit -am [message]

#提交時顯示所有diff信息git commit -v

#使次新的commit,替代上次提交#如果代碼沒有任何新變化,則來改寫上次commit的提交信息git commit --amend -m [message]

#重做上次commit,并包括指定件的新變化git commit --amend

出所有tag git tag

#新建個tag在當(dāng)前commit git tag [tag]

#新建個tag在指定commit git tag [tag] [commit]

#查看tag信息git show [tag]

#提交指定taggit push [remote] [tag]

#提交所有taggit push [remote] --tags

#新建個分,指向某個taggit checkout -b [branch] [tag]

顯示有變的件git status

#顯示當(dāng)前分的版本歷史git log

#顯示commit歷史,以及每次commit發(fā)變的件git log --stat

#顯示某個件的版本歷史,包括件改名git log --follow [file]git whatchanged [file]

#顯示指定件相關(guān)的每次diff git log -p [file]

#顯示指定件每的最后修改和時間git blame [file]

#顯示暫存區(qū)和作區(qū)的差異git diff

#顯示暫存區(qū)和上個commit的差異git diff --cached []

#顯示作區(qū)與當(dāng)前分最新commit之間的差異git diff HEAD

#顯示兩次提交之間的差異git diff [first-branch]...[second-branch]

#顯示某次提交的元數(shù)據(jù)和內(nèi)容變化git show [commit]

#顯示某次提交發(fā)變化的件git show --name-only [commit]

#顯示某次提交時,某個件的內(nèi)容git show [commit]:[filename]

#顯示當(dāng)前作區(qū)的操作歷史git reflog

拉取遠(yuǎn)程倉庫的所有變動(影響作空間) git fetch [remote]

#顯示所有遠(yuǎn)程倉庫git remote -v

#顯示某個遠(yuǎn)程倉庫的信息git remote show [remote]

#增加個新的遠(yuǎn)程倉庫,并命名git remote add [shortname] [url]

#取回遠(yuǎn)程倉庫的變化,并與本地分合并(pull = fetch + merge) git pull [remote] [branch]

#上傳本地指定分到遠(yuǎn)程倉庫git push [remote] [branch]

#強(qiáng)推送當(dāng)前分到遠(yuǎn)程倉庫,即使有沖突git push [remote] --force

#推送所有分到遠(yuǎn)程倉庫git push [remote] --all

撤銷

git? checkout 46bce36e60669dec51968a0f7d1f867a5451511d app/src/main/java/com/example/aa/gittest/MainActivity.java

可以回到mainactivity在46其垄。。卤橄。绿满。這次提交的樣子!很實用窟扑!

恢復(fù)暫存區(qū)的指定件到作區(qū)git checkout [file]

#恢復(fù)某個commit的指定件到作區(qū)git checkout [commit] [file]

恢復(fù)上個commit的所有件到作區(qū)git checkout .

#重置暫存區(qū)的指定件,與上次commit保持致,但作區(qū)變git reset [file]

#重置暫存區(qū)與作區(qū),與上次commit保持致git reset --hard

#重置當(dāng)前分的指針為指定commit,同時重置暫存區(qū),但作區(qū)變git reset [commit]

#重置當(dāng)前分的HEAD為指定commit,同時重置暫存區(qū)和作區(qū),與指定commit致git reset --hard [commit]

#重置當(dāng)前HEAD為指定commit,但保持暫存區(qū)和作區(qū)變git reset --keep [commit]

#新建個commit,來撤銷指定commit#后者的所有變化都將被前者抵消,并且應(yīng)到當(dāng)前分git revert [commit]

vim? test.txt保存退出:按esc再輸入:wq

rebase,先找到experiment和master共同節(jié)點c2#從experiment分c2后的所有commit(c4),砍掉后在master上進(jìn)衍變?yōu)閏4' git checkout experimentgit rebase master

# rebase的過程個個commit進(jìn)衍變的#如遇沖突,會個個接著提示,解決沖突后git add [conflic-files]git rebase --continue

#如果接下來還有沖突,解決沖突后,重復(fù)上的操作,直到所有的沖突解決完畢git add [conflic-files]git rebase --continue

#如果沖突太多,想合并,可以使以下命令終合并,回滾操作git rebase --abort

總結(jié)merge會成次merge commit,merge commit是個雙親節(jié)點rebase會保持log在條線上,但是會改變提交歷史(c4和c4'的commit id樣)如遇沖突,merge會要求次性解決所有沖突,rebase則要求個個解決沖突

需要注意的是,push出去的commit,允許進(jìn)rebase,原因就是因為它的commit id會改變

最后喇颁,在看下三個:

1.git cherry-pick ?XX

git cherry-pick ? 然后還要記得push

2.查看當(dāng)前l(fā)og 是在那個分支拉取的(有的時候可能不能顯示,但是我在公司項目中能實現(xiàn))

3.reset XXX 還原本地嚎货,還原遠(yuǎn)程的:

git reset --hard 684907fc96e48c93c625c56398e283bd1d0f67d8

git? commit -m"XXXX? "? --no-verify ?跳過代碼檢查橘霎;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市殖属,隨后出現(xiàn)的幾起案子姐叁,更是在濱河造成了極大的恐慌,老刑警劉巖洗显,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件外潜,死亡現(xiàn)場離奇詭異,居然都是意外死亡挠唆,警方通過查閱死者的電腦和手機(jī)处窥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玄组,“玉大人碧库,你說我怎么就攤上這事∏汕冢” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵弄匕,是天一觀的道長颅悉。 經(jīng)常有香客問我,道長迁匠,這世上最難降的妖魔是什么剩瓶? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮城丧,結(jié)果婚禮上延曙,老公的妹妹穿的比我還像新娘。我一直安慰自己亡哄,他們只是感情好枝缔,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般愿卸。 火紅的嫁衣襯著肌膚如雪灵临。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天趴荸,我揣著相機(jī)與錄音儒溉,去河邊找鬼。 笑死发钝,一個胖子當(dāng)著我的面吹牛顿涣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酝豪,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涛碑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寓调?” 一聲冷哼從身側(cè)響起锌唾,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夺英,沒想到半個月后晌涕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡痛悯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年余黎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片载萌。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惧财,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扭仁,到底是詐尸還是另有隱情垮衷,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布乖坠,位于F島的核電站搀突,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏熊泵。R本人自食惡果不足惜仰迁,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顽分。 院中可真熱鬧徐许,春花似錦、人聲如沸卒蘸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至澄步,卻和暖如春冰蘑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背村缸。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工祠肥, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梯皿。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓仇箱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親东羹。 傳聞我的和親對象是個殘疾皇子剂桥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

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

  • 聲明:這篇文章來源于廖雪峰老師的官方網(wǎng)站,我僅僅是作為學(xué)習(xí)之用 Git簡介 Git是什么属提? Git是目前世界上最先...
    橫渡閱讀 3,953評論 3 27
  • 本文作者陳云峰权逗,轉(zhuǎn)載請注明。 這篇文章記錄個人常用的一些命令冤议,和記不住的一些命令斟薇,轉(zhuǎn)載了并不斷更新。 Git官網(wǎng) ...
    陳云峰閱讀 2,814評論 0 24
  • 寫在前面 有關(guān)Git的誕生故事以及Git的強(qiáng)大恕酸,這里無須贅述堪滨。寫這篇文章的原因是因為,習(xí)慣了用Git桌面工具向Gi...
    艾倫先生閱讀 558評論 0 3
  • 創(chuàng)建版本庫 什么是版本庫呢蕊温?版本庫又名倉庫袱箱,英文名repository,你可以簡單理解成一個目錄义矛,這個目錄里面的所...
    景岳閱讀 759評論 0 3
  • 快手 測試工程師 工作職責(zé): 負(fù)責(zé)移動客戶端的產(chǎn)品測試发笔,保證產(chǎn)品質(zhì)量 根據(jù)產(chǎn)品產(chǎn)品需求和用戶場景,編寫測試案例凉翻,完...
    TonyLan閱讀 173評論 0 0