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
接下來三步走:
git add .
git commit -a -m 'xxxxx' //這里的-m后邊是提交代碼的描述信息
· 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)端的版本
為了覆蓋掉遠(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}存儲,從列表中刪除這個(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è)位置