1,如何在mac中生存isa_key
1.下載安裝git
Mac上是自帶git的磁餐,所以不需要自己下載和安裝
2.生成SSH KEY
cd ~/.ssh 切換目錄到這個路徑
$ vim id_rsa.pub 將這個文件的內(nèi)容顯示到終端上
4.將KEY添加到github或gitlab等
2,如何關(guān)聯(lián)兩個isa_key到不同的遠程倉庫
https://www.cnblogs.com/qingguo/p/5686247.html
3,刪除遠程分支
https://blog.zengrong.net/post/1746.html
4,如何通過rebase去合并提交記錄
http://blog.csdn.net/yangcs2009/article/details/47166361
5,Android studio中如何使用git
https://www.cnblogs.com/ghylzwsb/archive/2017/03/12/GitOnAS.html
6,如何關(guān)聯(lián)本地分支和遠程分支
git push -u origin xxx
git pull -u origin xxx (注意-u參數(shù))
7,如何查看本地分支和遠程分支之間的關(guān)系
git branch -vv
8,Git fetch和git pull的區(qū)別
http://www.reibang.com/p/d265f7763a3a
9,git push -u origin xxx 中origin指什么
origin只是一個遠程倉庫的標簽旁理,用來代表遠程倉庫狱窘,它關(guān)聯(lián)了一個url地址.
10,git中fast forward是什么意思
fast forward是一種merge時候快進模式,每次進行分支merge的時候毫胜,在不指定--no-ff的情況下永脓,git會視情況而定啟用fast forward模式神妹,那具體哪種情況下會啟用fast forward模式呢?
如圖磕仅,在當前分支為master分支的情況下珊豹,git merge dev會啟動fast forward模式
這種模式僅僅是將master指針指向dev,所以會很快。
那什么情況下不會啟動fast forward模式呢榕订?
上面這種情況在master分支也有提交的情況合并feature1分支到master就不會啟動fast forward模式.
最后平夜,我們?nèi)绾卧诘谝环N情況下禁用fast forward模式,只需要加上--no-ff參數(shù)
git merge --no-ff -m "merge with no-ff" dev
在這種情況下會生成一個commit(提交message是 merge with no-ff )卸亮,這就相當于下圖:
如果覺得不夠詳細可以看下面兩篇文章:
創(chuàng)建與合并分支-廖雪峰
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000
分支管理策略-廖雪峰
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410364457b9e3d821f4244beb0fd69c61a185ae0000
11,如何把本地倉庫提交到遠程倉庫
當git init初始化一個本地倉庫過后忽妒,需要提交到遠程倉庫,我們首先需要關(guān)聯(lián)到遠程倉庫
git remote add origin git@xx.xx.xx.xx:repos/xxx/xxx/xxx.git
再使用
git remote -v
查看是否關(guān)聯(lián)成功
最后使用
git push -u origin master推送到遠程倉庫(在這種情況下可能需要先pull一次)
12,git如何重命名遠程分支
在git中重命名遠程分支兼贸,其實就是先刪除遠程分支段直,然后重命名本地分支,再重新提交一個遠程分支溶诞。
例如下面的例子中,我想重命名遠程的develop分支為devbranch
huanglideMacBook-Pro:MyRxJava huangli$ git branch
develop
* master
刪除遠程分支:
huanglideMacBook-Pro:MyRxJava huangli$ git push --delete origin develop
To git@gitee.com:micaixiaoduanku/MyRxJava.git
- [deleted] develop
huanglideMacBook-Pro:MyRxJava huangli$
重命名本地分支:
huanglideMacBook-Pro:MyRxJava huangli$ git branch -m develop devbranch
push該分支
huanglideMacBook-Pro:MyRxJava huangli$ git push origin devbranch
13,git如何拉取指定的遠程分支
方法一
使用如下命令:
git checkout -b 本地分支名x origin/遠程分支名x
使用該方式會在本地新建分支x鸯檬,并自動切換到該本地分支x。
采用此種方法建立的本地分支會和遠程分支建立映射關(guān)系螺垢。
方式二
使用如下命令:
git fetch origin 遠程分支名x:本地分支名x
使用該方式會在本地新建分支x喧务,但是不會自動切換到該本地分支x赖歌,需要手動checkout。
采用此種方法建立的本地分支不會和遠程分支建立映射關(guān)系功茴。
14,git branch -r 顯示的不是最新的遠程分支列表
業(yè)務(wù)需要庐冯,要拉取其他同事的分支代碼,git branch -r 了一下坎穿,發(fā)現(xiàn)找不到同事的分支展父,但gitlab中是有這個分支的,就是本地的遠程分支列表和遠程服務(wù)器上的分支不一致玲昧,git pull了好幾次栖茉,也沒解決問題,后來git fetch了一下孵延,就好了吕漂,后來查了一下git fetch, git fetch會把遠程服務(wù)器上所有的更新都拉取下來,git pull是把遠程分支的代碼拉取下來并合并到本地分支
15,git中如何比較分支的區(qū)別
16,git如何回退到遠程最新的版本
git fetch --all
git reset --hard origin/master(根據(jù)本地版本)
17,git rebase到底是什么作用?
git中rebase是用來重新定義版本基線的尘应,基線是倉庫初始化或者新開分支最開始的提交記錄.這樣說來可能有點抽象, 用圖來表示應該會更加好容易理解.
如上圖痰娱,對于Dev分支來說目前它的基線就是提交記錄A,那么重新定義基線的意思就是更換指向1的源頭菩收。例如通常我們會去rebase Master分支到Dev.使其變成這樣:
那么現(xiàn)在Dev分支的提交基線就是C了.
那么它在實際應用中有什么作用呢梨睁?
我總結(jié)了三條:
1,用它來合并提交記錄.
2娜饵,當出現(xiàn)本地分支提交記錄和遠程分支提交記錄不同的情況下坡贺,進行rebase可以減少一個merge過程.
3, 當進行feature分支開發(fā)的時候,定期去執(zhí)行rebase Dev分支的代碼可以減少最終feature分支合并到Dev分支的工作量
18,當前倉庫關(guān)聯(lián)到一個遠程倉庫箱舞,但是想關(guān)聯(lián)到另外一個遠程倉庫.
當前倉庫關(guān)聯(lián)到的遠程倉庫:
huanglideMacBook-Pro:android-v4 huangli$ git remote -v
origin git@syncsvn.bilibili.co:android/android-v4.git (fetch)
origin git@syncsvn.bilibili.co:android/android-v4.git (push)
希望關(guān)聯(lián)到的遠程倉庫
git@github.com:micaixiaoduanku/MyDemosNew.git
方案1 添加新的分支到新的倉庫
git remote rm origin
git remote add origin https://xxx.git
git push -u origin yourbranch
方案2 關(guān)聯(lián)到之前的分支進行merge
git remote rm origin
git remote add origin https://xxx.git
git pull -u origin yourbranch
注意方案2可能會存在很多沖突
19 git中的stash
https://www.cnblogs.com/yanghaizhou/p/5269899.html
20. 每次提交代碼的時候都提示Enter passphrase for key
http://blog.csdn.net/superbfly/article/details/75287741
21. 如何 clone git 項目到一個非空目錄
如果我們往一個非空的目錄下 clone git 項目遍坟,就會提示錯誤信息:
fatal: destination path '.' already exists and is not an empty directory.
解決的辦法是:
- 進入非空目錄,假設(shè)是 /workdir/proj1
- git clone --no-checkout https://git.oschina.net/NextApp/platform.git tmp
- mv tmp/.git . #將 tmp 目錄下的 .git 目錄移到當前目錄
- rmdir tmp
- git reset --hard HEAD
然后就可以進行各種正常操作了晴股。
22.如何使用cherry-pick同步commit提交.
http://www.reibang.com/p/08c3f1804b36
23.git 中如何撤銷部分修改
修改了兩個文件a愿伴、b為例,假設(shè)需要撤銷文件a的修改电湘,則修改后的兩個文件:1隔节、如果沒有被git add到索引區(qū)git checkout a 便可撤銷對文件a的修改2、如果被git add到索引區(qū)寂呛,但沒有做git commit提交1)使用git reset將a從索引區(qū)移除(但會保留在工作區(qū))git reset HEAD a2)撤銷工作區(qū)中文件a的修改git checkout a 3怎诫、如果已被提交,則需要先回退當前提交到工作區(qū)贷痪,然后撤銷文件a的修改1)回退當前提交到工作區(qū)git reset HEAD^2)撤銷工作區(qū)中文件a的修改git checkout a
作者:佛陀小沙彌
鏈接:https://www.zhihu.com/question/20039839/answer/125382988
來源:知乎
著作權(quán)歸作者所有幻妓。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處劫拢。
24.rebase過程沒有提示沖突肉津,但是編譯不過
Master A -> B (位置a)
Dev A -> B (位置b)
B (位置b) 這個位置的提交優(yōu)先于 B (位置a) 的提交强胰, Master A的修改優(yōu)先于 Dev A的修改,這個時候Dev rebase master就會出現(xiàn)沒有沖突提示妹沙,但是還是編譯不過.
另外一種情況 - 記錄于2019.7.9
即便rebase沒有沖突顿涣,也不能代表可以正常編譯朝卒。
下面這種情況
Master 可以正常編譯
我自己從master切出來的 dev 分支也可以正常編譯
但是我rebase了master沒有報沖突卻不能正常編譯了
具體文件是這種情況
好吧摊册,這很清楚了变擒,其實這樣去合并的確是沒有沖突的分俯。這意味著rebase過后沒有沖突也不能代表一定能編譯過.