Git命令使用總結(jié)

git工作流程.png
pull和fetch merge命令.png
1.在GitHub上創(chuàng)建了一個(gè)新項(xiàng)目铛嘱,如何將本地的一個(gè)工程上傳上去
1) copy github項(xiàng)目地址
2) 在android studio中打開terminal命令行地粪,執(zhí)行命令將本項(xiàng)目所有代碼添加
git add *
3)執(zhí)行命令提交
git commit -m "描述信息" 
4)執(zhí)行命令將本地代碼和遠(yuǎn)端路徑綁定
git remote add origin https://github.com/renzhenming/ArRemote.git
5)執(zhí)行命令提交代碼
git push origin master
2.創(chuàng)建分支
git branch [branch name]
3.從git地址clone
git clone git@github.com:FBing/design-patterns.git     git@github.com:FBing/design-patterns.git是項(xiàng)目地址
4.查看當(dāng)前所在分支
git branch 比如當(dāng)前在master分支妒潭,那么會顯示*master
5.查看遠(yuǎn)程分支
git branch -r
6.查看所有分支,包括本地和遠(yuǎn)程
git branch -a
7.切換到另一分支
git checkout [branch name]
8.創(chuàng)建分支的同時(shí)切換到該分支上
git checkout -b [branch name]

這一命令的效果相當(dāng)于以下兩步操作:
git branch [branch name]
git checkout [branch name]
9.將新分支推送到github
git push origin [branch name]
10.刪除本地分支
git branch -d [branch name]
11.刪除github遠(yuǎn)程分支
git push origin :[branch name] (冒號需要緊挨著分支名瓜晤,不能有空格)
12.git將代碼提交到遠(yuǎn)程分支非主分支

一個(gè)倉庫可以包含多個(gè)分支叮阅,有一個(gè)默認(rèn)的主分支:master
若想提交代碼至遠(yuǎn)程倉庫的某個(gè)分支(非主分支)
先查看下本地分支以及遠(yuǎn)程分支:git branch -a

image

由本地分支(非主分支master)提交至遠(yuǎn)程分支,新建一個(gè)本地分支,并切換到此分支:Git branch-b temp
image

如果已有本地分支可直接切換:git checkout [name]
image

接下來三步走:

git add .
git commit -a -m 'xxxxx' //這里的-m后邊是提交代碼的描述信息

git push origin sunmaoyu //git push origin master的意思就是上傳本地當(dāng)前分支代碼到master分支笋籽。git push是上傳本地所有分支代碼到遠(yuǎn)程對應(yīng)的分支上。
image
image
image

· git add -A 提交所有變化
· git add -u 提交被修改(modified)和被刪除(deleted)文件椭员,不包括新文件(new)
· git add . 提交新文件(new)和被修改(modified)文件车海,不包括被刪除(deleted)文件

13. git add .之后,取消add狀態(tài)
git reset HEAD <file> file為完整路徑
可以通過git status 獲取到
14.修改代碼后如何尚未add的時(shí)候取消所有的修改
git checkout -- <file>
file為完整路徑
可以通過git status 獲取到
15.合并分支代碼
1隘击、進(jìn)入要合并的分支(如開發(fā)分支合并到master侍芝,則進(jìn)入master目錄)
git pull
2、查看所有分支是否都pull下來了
git branch -a
3埋同、使用merge合并開發(fā)分支
git merge 分支名
4州叠、查看合并之后的狀態(tài)
git status 
5、有沖突的話凶赁,通過IDE解決沖突咧栗;(沒有沖突的文件已經(jīng)是commit狀態(tài)了)
6、解決沖突之后虱肄,將沖突文件提交暫存區(qū)
git add 沖突文件
7致板、提交merge之后的結(jié)果
git commit 
如果不是使用git commit -m "備注" ,那么git會自動(dòng)將合并的結(jié)果作為備注浩峡,提交本地倉庫可岂;
8、本地倉庫代碼提交遠(yuǎn)程倉庫(沒有沖突翰灾,merge之后直接push)
git push
git將分支合并到分支缕粹,將master合并到分支的操作步驟是一樣的;
16.查看遠(yuǎn)程服務(wù)器地址
git remote -v
17.列出當(dāng)前倉庫的所有tag
git tag
18.創(chuàng)建tag,附注tag(v1.2是tag名稱纸淮,-m后是注釋信息)
git tag v1.2 -m "1.2版本的tag"
19.切換到某一個(gè)tag(例如:git checkout v1.2)
git checkout [tagname]
20.查看標(biāo)簽信息(可以看到-m后的注釋信息)
git show v1.2
21.刪除標(biāo)簽(打錯(cuò)標(biāo)簽需要修改的時(shí)候平斩,需要先刪除,再重新打新的)
git tag -d v1.2
22.提交本地tag到git服務(wù)器(通常的git push不會將標(biāo)簽對象提交到git服務(wù)器咽块,需要進(jìn)行顯式的操作)
git push origin v1.2
23.提交所有本地標(biāo)簽到git服務(wù)器
git push origin --tags
24.在最后一次commit上 打標(biāo)簽
git tag -a "v0.2" c98c186ebb381005b495f6f1f2a65dc72195ad9d -m 'v0.2'
23.提交所有本地標(biāo)簽到git服務(wù)器
git push origin --tags
24.本地創(chuàng)建新分支后上傳到服務(wù)器同時(shí)創(chuàng)建服務(wù)器新分支
1.git branch 新分支名                創(chuàng)建本地新分支
2.git checkout 新分支名            切換到這個(gè)新創(chuàng)建的分支上,此時(shí)绘面,原來的代碼都在這個(gè)新分支上
3.git push origin 新分支名:服務(wù)器分支名(新創(chuàng)建的原來不存在的)        這樣就把代碼上傳到了服務(wù)器上一個(gè)新的分支中
25.類似操作git log 之后如何退出狀態(tài)的方法

git log 進(jìn)入了這種狀態(tài)

。侈沪。揭璃。
Date:   Thu Aug 10 11:18:48 2017 +0800

    testfight 3105
:

蘋果電腦按W Q鍵可退出

使用中發(fā)生的一些問題
本地創(chuàng)建了新分支,此時(shí)服務(wù)器上沒有對應(yīng)的分支亭罪,但是需要將這個(gè)分支提交到服務(wù)器
git push --set-upstream origin dev_location

這個(gè)命令會在服務(wù)器端創(chuàng)建分支dev_location并和本地做關(guān)聯(lián)瘦馍,然后就可以push了

Can't update: no tracked branch

服務(wù)器創(chuàng)建了新分支,本地創(chuàng)建并checkout之后更新代碼应役,此時(shí)兩端都有對應(yīng)的分支情组,但是沒有建立連接
提示如下燥筷,表明沒有建立連接,所以只需要按提示輸入命令

git branch --set-upstream v4.2 origin/v4.2

可能會提示

 The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-toBranch v4.2 set up to track remote branch v4.2 from origin.

不用管它院崇,已經(jīng)可以更新代碼了

異常:Can't update: no tracked branch
        No tracked branch configured for branch v4.2.
To make 
        your branch track a remote branch call, for example,
git 
        branch --set-upstream v4.2 origin/v4.2
Git(some untracked working tree files would be overwritten by merge ,Please move or remove them before you can merge. Aborting)
發(fā)生這一問題時(shí)如果需要被move的文件是android studio自動(dòng)生成的肆氓,這時(shí)不能直接在android studio里刪除文件,因?yàn)槟銊h除后會再次生成底瓣,pull或者update的結(jié)果是仍有這一錯(cuò)誤解決的辦法是關(guān)閉android studio 進(jìn)入需要被刪除的文件夾中將文件刪掉谢揪,然后直接在命令行中g(shù)it pull ,這樣就
可以把文件pull下來注意在pull之前不可以打開android studio,防止再次自動(dòng)生成
26.撤銷commit soft reset 和 hard reset

commit到本地后捐凭,如過需要撤銷這次commit可以這樣執(zhí)行
先使用git log 查看 commit日志

    commit 422bc088a7d6c5429f1d0760d008d86c505f4abe  
    Author: zhyq0826 <zhyq0826@gmail.com>  
    Date:   Tue Sep 4 18:19:23 2012 +0800  
      
        刪除最近搜索數(shù)目限制  
      
    commit 8da0fd772c3acabd6e21e85287bdcfcfe8e74c85  
    Merge: 461ac36 0283074  
    Author: zhyq0826 <zhyq0826@gmail.com>  
    Date:   Tue Sep 4 18:16:09 2012 +0800  

找到需要回退的那次commit的 哈希值键耕,

git reset --hard commit_id 

這樣操作的結(jié)果是提交到本地的代碼會消失,同樣工程中的代碼也會撤銷柑营,相當(dāng)于完全回到了上一個(gè)節(jié)點(diǎn)
如果僅僅想去掉本地提交而不影響工程中的代碼屈雄,可以這樣

git reset --soft commit_id 

兩者的區(qū)別如下
git reset –soft:回退到某個(gè)版本,只回退了commit的信息官套,不會恢復(fù)到index file一級酒奶。如果還要提交,直接commit即可
git reset –hard:徹底回退到某個(gè)版本奶赔,本地的源碼也會變?yōu)樯弦粋€(gè)版本的內(nèi)容

27.撤銷push到遠(yuǎn)端的代碼

在使用git時(shí)惋嚎,push到遠(yuǎn)端后發(fā)現(xiàn)commit了多余的文件,或者希望能夠回退到以前的版本站刑。
先在本地回退到相應(yīng)的版本:

git reset --hard <版本號>
// 注意使用 --hard 參數(shù)會拋棄當(dāng)前工作區(qū)的修改
// 使用 --soft 參數(shù)的話會回退到之前的版本另伍,但是保留當(dāng)前工作區(qū)的修改,可以重新提交

如果此時(shí)使用命令:

git push origin <分支名>

會提示本地的版本落后于遠(yuǎn)端的版本


image

為了覆蓋掉遠(yuǎn)端的版本信息绞旅,使遠(yuǎn)端的倉庫也回退到相應(yīng)的版本摆尝,需要加上參數(shù)--force

git push origin <分支名> --force
28.命令合并分支代碼

合并步驟:
1、進(jìn)入要合并的分支(如開發(fā)分支合并到master因悲,則進(jìn)入master目錄)
git pull
2堕汞、查看所有分支是否都pull下來了
git branch -a
3、使用merge合并開發(fā)分支
git merge 分支名
4晃琳、查看合并之后的狀態(tài)
git status
5讯检、有沖突的話,通過IDE解決沖突卫旱;(沒有沖突的文件已經(jīng)是commit狀態(tài)了)
6人灼、解決沖突之后,將沖突文件提交暫存區(qū)
git add 沖突文件
7顾翼、提交merge之后的結(jié)果
git commit
如果不是使用git commit -m "備注" 投放,那么git會自動(dòng)將合并的結(jié)果作為備注,提交本地倉庫暴构;
8跪呈、本地倉庫代碼提交遠(yuǎn)程倉庫(沒有沖突,merge之后直接push)
git push
git將分支合并到分支取逾,將master合并到分支的操作步驟是一樣的耗绿;

29. Android Studio 項(xiàng)目取消 GitHub關(guān)聯(lián)

有時(shí)候和github關(guān)聯(lián)的時(shí)候,我們執(zhí)行了git remote add origin http://xxxx將本地倉庫和遠(yuǎn)程地址關(guān)聯(lián)了起來砾隅,但是發(fā)現(xiàn)這個(gè)地址不是我們想要的地址误阻,這個(gè)時(shí)候再重新git remote add origin http://yyyy,會提示

fatal: remote origin already exists.

正確的操作步驟應(yīng)該是
1晴埂、先刪除遠(yuǎn)程 Git 倉庫
git remote rm origin
2究反、再添加遠(yuǎn)程 Git 倉庫
git remote add origin http://xxxx

30.git stash命令

本地做了修改之后,如果又突然需要update代碼儒洛,但是由于本地的修改并不完整精耐,你還不想commit,這時(shí)可以使用stash命令,這個(gè)命令會先將你的修改保存琅锻,執(zhí)行之后本地代碼會恢復(fù)到上一次commit的狀態(tài)

git stash

然后update服務(wù)器代碼卦停,更新完成之后執(zhí)行再執(zhí)行stash恢復(fù)剛剛保存的代碼

git stash pop

此時(shí)你會發(fā)現(xiàn),原本你在本地修改的代碼已經(jīng)又恢復(fù)了恼蓬,并且也已經(jīng)完成了和服務(wù)器的同步

31.git push origin與git push -u origin master的區(qū)別

$ git push origin

上面命令表示惊完,將當(dāng)前分支推送到origin主機(jī)的對應(yīng)分支。 

如果當(dāng)前分支只有一個(gè)追蹤分支处硬,那么主機(jī)名都可以省略小槐。 

$ git push 如果當(dāng)前分支與多個(gè)主機(jī)存在追蹤關(guān)系,那么這個(gè)時(shí)候-u選項(xiàng)
會指定一個(gè)默認(rèn)主機(jī)荷辕,這樣后面就可以不加任何參數(shù)使用git push凿跳。

$ git push -u origin master 上面命令將本地的master分支推送到origin主
機(jī),同時(shí)指定origin為默認(rèn)主機(jī)疮方,后面就可以不加任何參數(shù)使用git push了拄显。

 不帶任何參數(shù)的git push,默認(rèn)只推送當(dāng)前分支案站,這叫做simple方式躬审。此
外,還有一種matching方式蟆盐,會推送所有有對應(yīng)的遠(yuǎn)程分支的本地分支承边。
Git 2.0版本之前,默認(rèn)采用matching方法石挂,現(xiàn)在改為默認(rèn)采用simple方
式博助。

git push origin master

origin指定了你要push到哪個(gè)remote

master其實(shí)是一個(gè)“refspec”,正常的“refspec”的形式為”+<src>:<dst>”痹愚,冒號前表示local branch的名字富岳,冒號后表示remote repository下 branch的名字蛔糯。注意,如果你省略了<dst>窖式,git就認(rèn)為你想push到remote repository下和local branch相同名字的branch蚁飒。聽起來有點(diǎn)拗口,再解釋下萝喘,push是怎么個(gè)push法淮逻,就是把本地branch指向的commit push到remote repository下的branch,比如

$git push origin master:master (在local repository中找到名字為master的branch阁簸,使用它去更新remote repository下名字為master的branch爬早,如果remote repository下不存在名字是master的branch,那么新建一個(gè))

$git push origin master (省略了<dst>启妹,等價(jià)于“git push origin master:master”)

$git push origin master:refs/for/mybranch (在local repository中找到名字為master的branch筛严,用他去更新remote repository下面名字為mybranch的branch)

$git push origin HEAD:refs/for/mybranch (HEAD指向當(dāng)前工作的branch,master不一定指向當(dāng)前工作的branch饶米,所以我覺得用HEAD還比master好些)

$git push origin :mybranch (再origin repository里面查找mybranch脑漫,刪除它。用一個(gè)空的去更新它咙崎,就相當(dāng)于刪除了)

如何解決二進(jìn)制文件的沖突(如aar)

對于二進(jìn)制文件的沖突优幸,你肯定不想通過編輯二進(jìn)制文件來解決沖突,那是不可能完成的事情褪猛。
你要做的就是:要么選擇對方的修改,要么選擇自己的修改。
你可以用git checkout的--theirs或--ours選項(xiàng)。

git pull
git checkout --theirs YOUR_BINARY_FILE
// git checkout --ours YOUR_BINARY_FILE
git add YOUR_BINARY_FILE
git commit -m 'merged with the remote repos.'
git push

stash使用

(1)git stash save "save message" : 執(zhí)行存儲時(shí),添加備注,方便查找,只有g(shù)it stash 也可以的欲险,但查找時(shí)不方便識別槐壳。
(2)git stash list :查看stash了哪些存儲
(3)git stash show :顯示做了哪些改動(dòng)灼卢,默認(rèn)show第一個(gè)存儲,如果要顯示其他存貯,后面加stash@{$num},比如第二個(gè) git stash show stash@{1}

(4)git stash show -p : 顯示第一個(gè)存儲的改動(dòng),如果想顯示其他存存儲,命令:git stash show stash@{$num} -p ,比如第二個(gè):git stash show stash@{1} -p

(5)git stash apply :應(yīng)用某個(gè)存儲,但不會把存儲從存儲列表中刪除,默認(rèn)使用第一個(gè)存儲,即stash@{0},如果要使用其他個(gè),git stash apply stash@{$num} , 比如第二個(gè):git stash apply stash@{1}

(6)git stash pop :命令恢復(fù)之前緩存的工作目錄筋蓖,將緩存堆棧中的對應(yīng)stash刪除侈百,并將對應(yīng)修改應(yīng)用到當(dāng)前的工作目錄下,默認(rèn)為第一個(gè)stash,即stash@{0},如果要應(yīng)用并刪除其他stash织咧,命令:git stash pop stash@{$num} ,比如應(yīng)用并刪除第二個(gè):git stash pop stash@{1}

(7)git stash drop stash@{num} :丟棄stash@{num}存儲,從列表中刪除這個(gè)存儲
(8)git stash clear :刪除所有緩存的stash

git本地創(chuàng)建新分支并推送到遠(yuǎn)程

(1) 本地創(chuàng)建并切換分支**
git checkout -b dev
(2) 將dev分支推送到遠(yuǎn)程**
git push origin dev:dev //推送本地的dev(冒號前面的)分支到遠(yuǎn)程origin的dev(冒號后面的)分支(沒有會自動(dòng)創(chuàng)建)
(3) 建立本地到上游(遠(yuǎn)端)倉的鏈接中符,這樣代碼才能提交上去**
git branch --set-upstream-to=origin/dev
(4) 取消對master分支的跟蹤**
git branch --unset-upstream master

git blame查看某文件制定行的修改人

//顯示W(wǎng)kFeedChainMdaReport中第948 到第 962行代碼的修改人和提交時(shí)間
git blame -L 948,962  xxx/xxx/WkFeedChainMdaReport.java

如何取消git pull后自動(dòng)merge到本分支的代碼

git pull用的很多慢蜓,有時(shí)候不小心pull了一個(gè)分支耘柱,然后自動(dòng)就merge到當(dāng)前分支了镜遣,于是很可能就產(chǎn)生了沖突,那么怎么把這次merge取消士袄?(加入當(dāng)前在分支A,輸入命令git pull origin B,把B pull了下來悲关,和當(dāng)前Amerge后產(chǎn)生沖突)

首先:

git reflog

80aaa77c3 (HEAD -> renzm_86084, origin/renzm_86084) HEAD@{0}: reset: moving to HEAD
80aaa77c3 (HEAD -> renzm_86084, origin/renzm_86084) HEAD@{1}: commit: 添加默認(rèn)策略配置
a13e41d6b HEAD@{2}: checkout: moving from t2m_86084_20210312104030 to renzm_86084
......

然后

git reset --hard HEAD@{n},(n是你要回退到的引用位置)回退

如:
git reset --hard HEAD@{1}娄柳,回退到HEAD@{1}: commit: 添加默認(rèn)策略配置這個(gè)位置
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寓辱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子西土,更是在濱河造成了極大的恐慌讶舰,老刑警劉巖鞍盗,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件需了,死亡現(xiàn)場離奇詭異,居然都是意外死亡般甲,警方通過查閱死者的電腦和手機(jī)肋乍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敷存,“玉大人墓造,你說我怎么就攤上這事∶常” “怎么了觅闽?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涮俄。 經(jīng)常有香客問我蛉拙,道長,這世上最難降的妖魔是什么彻亲? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任孕锄,我火速辦了婚禮,結(jié)果婚禮上苞尝,老公的妹妹穿的比我還像新娘畸肆。我一直安慰自己,他們只是感情好宙址,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布轴脐。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪豁辉。 梳的紋絲不亂的頭發(fā)上令野,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音徽级,去河邊找鬼气破。 笑死,一個(gè)胖子當(dāng)著我的面吹牛餐抢,可吹牛的內(nèi)容都是我干的现使。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼旷痕,長吁一口氣:“原來是場噩夢啊……” “哼碳锈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起欺抗,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤售碳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绞呈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贸人,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年佃声,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艺智。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡圾亏,死狀恐怖十拣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情志鹃,我是刑警寧澤夭问,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站曹铃,受9級特大地震影響缰趋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铛只,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一埠胖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淳玩,春花似錦直撤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽红柱。三九已至,卻和暖如春蓖乘,著一層夾襖步出監(jiān)牢的瞬間锤悄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工嘉抒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留零聚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓些侍,卻偏偏與公主長得像隶症,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子岗宣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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