git使用

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

git commit --amend ? 前提是沒push

cherry-pick [commit

git branch -r --contains cfc3521a32bd

git ?blame [fiel] 看具體修改

Git使用由淺入深

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

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

當自己寫完一段程序,完成一個功能,看自己修改了哪些東西,使用git status,

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

HEAD指向的版本就是當前版本,因此,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:增加網絡請求和響應處理的類

·f7c8d7bHEAD@{5}: commit:增加了數據庫,和基本的配置

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

·(END)

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

在github上創建一個倉庫,然后進到本地的項目中,使用:

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

這個完成后,在你的本地項目中會多出一個文件夾:你GitHub上倉庫的名字,然后打開你會發現比你倉庫中多出一個文件,這里有個隱藏的文件,需要你現實自己電腦隱藏的文件,全選這幾個文件,復制,粘貼到外面一層目錄,會提示你.gitignore文件是隱藏的不能替換,那你就先把外層的這個文件刪除了,在替換過去,替換完了把這個剛才多出來的文件夾刪除就好,然后你在本地項目根目錄,輸入gitbranch就能看到當前在master分支上,你就可以開始了!

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

```

/build

/.gradle

/.idea

local.properties

*.iml

*.orig

*.pyc

```

一般我們不在master分支上開發,新建一個dev分支并把新建的分支推到遠端

?GitTestgit:(master)?git branch dev

?GitTestgit:(master)?git push origin

這個時候做第一次修改,然后看修改狀態,提交

add是把這些文件都放到寄存區,stage然后通過commit提交到默認的master分支

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

你看,我們前面講了,Git管理的是修改,當你用git add命令后,在工作區的第一次修改被放入暫存區,準備提交,但是,在工作區的第二次修改并沒有放入暫存區,所以,git commit只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交。

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

現在你有兩個選擇,一是確實要從版本庫中刪除該文件,那就用命令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

現在,文件就從版本庫中被刪除了。

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

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

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

小結

命令git rm用于刪除一個文件。如果一個文件已經被提交到版本庫,那么你永遠不用擔心誤刪,但是要小心,你只能恢復文件到最新版本,你會丟失最近一次提交后你修改的內容

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

Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快

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

git下創建文件夾mkdir創建文件mkfile -n 1024 test.txt???1024是字節數

刪除:

rm -rf three20

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

rm刪除命令。即remove的縮寫,它后面有兩個參數。

-r刪除文件夾內的子文件夾及內容,一般情況下rm只能刪除文件或者空的文件夾。

-f強制刪除參數

如果需要了解rm命令的更多參數。請輸入:man rm

我們創建dev分支,然后切換到dev分支:

$git checkout -b dev創建并切換到這個分支

Switchedto a new branch'dev'

git checkout命令加上-b參數表示創建并切換,相當于以下兩條命令:

$git branch dev

$git checkout dev

Switchedto branch'dev'

然后,用git branch命令查看當前分支:

$git branch

* dev

master

git branch命令會列出所有分支,當前分支前面會標一個*號。

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

Creating anewbranch is quick.

然后提交:

$git add readme.txt

$git commit -m"branch test"

[dev fec145a] branch test

1file changed,1insertion(+)

現在,dev分支的工作完成,我們就可以切換回master分支:

$git checkout master

Switchedto branch'master'

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

現在,我們把dev分支的工作成果合并到master分支上:

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

Updatingd17efd8..fec145a

Fast-forward

readme.txt |1+

1file changed,1insertion(+)

git merge命令用于合并指定分支到當前分支。合并后,再查看readme.txt的內容,就可以看到,和dev分支的最新提交是完全一樣的。

注意到上面的Fast-forward信息,Git告訴我們,這次合并是“快進模式”,也就是直接把master指向dev的當前提交,所以合并速度非常快。

當然,也不是每次合并都能Fast-forward,我們后面會講其他方式的合并。

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

$git branch -d dev

Deletedbranch dev (was fec145a).

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

$git branch

* master

因為創建、合并和刪除分支非常快,所以Git鼓勵你使用分支完成某個任務,合并后再刪掉分支,這和直接在master分支上工作效果是一樣的,但過程更安全。

小結

Git鼓勵大量使用分支:

查看分支:git branch

創建分支:git branch

切換分支:git checkout

創建+切換分支:git checkout -b

合并某分支到當前分支: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

以上的區別就是d會判斷當前分支是否合并,如果存在沒有合并的,則不允許刪除,—D就是暴力刪除,這個要慎用

1.1刪除分支。遠程:git push origin :test1

1.2刪除本地: git branch -d XX

分支名沒有起好,如何改名字?

三部曲:

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

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

第三:刪除原來的原創分支;

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

1.在A項目的tag上,使用git ?branch ?test1??,再git ?branch而不是git ?branch -a能看到新建的分支,然后在git checkout到對應的分支上,再使用git push -u origin test1提交到服務器,成功后使用git log查看提交,現在在新建的test1分支上拉代碼就好了

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

基于tag拉取分支是一樣的

針對多模塊使用git status需要進到各個目錄下

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

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

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

查找tag所在分支

git branch -r --contains commitid

git branch -r --contains tagname

把本地tag推送到遠端:git push –tags

git fetch origin tag

Workspace:工作區Index/Stage:暫存區Repository:本地倉庫Remote:遠程倉庫

查看git的配置表#查看當前git倉庫配置表

git config --list

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

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

1.git init

關聯遠程倉庫:git remote add origingit@10.20.11.218:FFProject/App_Android.git

檢出倉庫

git clone git@10.20.11.218:FFProject/App_Android.git

ignore

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

增加/刪除

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

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

#添加當前錄的所有件到暫存區git add .

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

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

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

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

提交暫存區到倉庫區git commit -m [message]

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

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

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

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

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

提交暫存區到倉庫區git commit -m [message]

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

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

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

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

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

出所有tag git tag

#新建個tag在當前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

#顯示當前分的版本歷史git log

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

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

#顯示指定件相關的每次diff git log -p [file]

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

#顯示暫存區和作區的差異git diff

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

#顯示作區與當前分最新commit之間的差異git diff HEAD

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

#顯示某次提交的元數據和內容變化git show [commit]

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

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

#顯示當前作區的操作歷史git reflog

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

#顯示所有遠程倉庫git remote -v

#顯示某個遠程倉庫的信息git remote show [remote]

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

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

#上傳本地指定分到遠程倉庫git push [remote] [branch]

#強推送當前分到遠程倉庫,即使有沖突git push [remote] --force

#推送所有分到遠程倉庫git push [remote] --all

撤銷

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

可以回到mainactivity在46。。。。這次提交的樣子!很實用!

恢復暫存區的指定件到作區git checkout [file]

#恢復某個commit的指定件到作區git checkout [commit] [file]

恢復上個commit的所有件到作區git checkout .

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

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

#重置當前分的指針為指定commit,同時重置暫存區,但作區變git reset [commit]

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

#重置當前HEAD為指定commit,但保持暫存區和作區變git reset --keep [commit]

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

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

rebase,先找到experiment和master共同節點c2#從experiment分c2后的所有commit(c4),砍掉后在master上進衍變為c4' git checkout experimentgit rebase master

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

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

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

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

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

最后,在看下三個:

1.git cherry-pick ?XX

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

2.查看當前log 是在那個分支拉取的(有的時候可能不能顯示,但是我在公司項目中能實現)

3.reset XXX 還原本地,還原遠程的:

git reset --hard 684907fc96e48c93c625c56398e283bd1d0f67d8

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

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

推薦閱讀更多精彩內容

  • 聲明:這篇文章來源于廖雪峰老師的官方網站,我僅僅是作為學習之用 Git簡介 Git是什么? Git是目前世界上最先...
    橫渡閱讀 3,972評論 3 27
  • 本文作者陳云峰,轉載請注明。 這篇文章記錄個人常用的一些命令,和記不住的一些命令,轉載了并不斷更新。 Git官網 ...
    陳云峰閱讀 2,834評論 0 24
  • 創建版本庫 什么是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄里面的所...
    景岳閱讀 773評論 0 3
  • 快手 測試工程師 工作職責: 負責移動客戶端的產品測試,保證產品質量 根據產品產品需求和用戶場景,編寫測試案例,完...
    TonyLan閱讀 176評論 0 0
  • 01 不知不覺,又到了飄雪的季節。閑來無事,便沏了一杯清茶,懶散的在書桌旁坐下。靜靜的看著杯子里的熱氣緩緩升騰,然...
    涼苡閱讀 989評論 5 2