Git使用一些常见问题记录(持续更新ing)

1,如何在mac中生存isa_key

1.下载安装git
Mac上是自带git的,所以不需要自己下载和安装
2.生成SSH KEY
ssh-keygen -t rsa -C 44600937@qq.com 3.查看.pub文件 cd ~/.ssh 切换目录到这个路径
$ vim id_rsa.pub 将这个文件的内容显示到终端上
4.将KEY添加到github或gitlab等

2,如何关联两个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,如何关联本地分支和远程分支

git push -u origin xxx
git pull -u origin xxx (注意-u参数)

7,如何查看本地分支和远程分支之间的关系

git branch -vv

8,Git fetch和git pull的区别

http://www.jianshu.com/p/d265f7763a3a

9,git push -u origin xxx 中origin指什么

origin只是一个远程仓库的标签,用来代表远程仓库,它关联了一个url地址.

10,git中fast forward是什么意思

fast forward是一种merge时候快进模式,每次进行分支merge的时候,在不指定--no-ff的情况下,git会视情况而定启用fast forward模式,那具体哪种情况下会启用fast forward模式呢?

image.png

如图,在当前分支为master分支的情况下,git merge dev会启动fast forward模式
image.png

这种模式仅仅是将master指针指向dev,所以会很快。
那什么情况下不会启动fast forward模式呢?
image.png

上面这种情况在master分支也有提交的情况合并feature1分支到master就不会启动fast forward模式.
最后,我们如何在第一种情况下禁用fast forward模式,只需要加上--no-ff参数
git merge --no-ff -m "merge with no-ff" dev
在这种情况下会生成一个commit(提交message是 merge with no-ff ),这就相当于下图:
image.png

如果觉得不够详细可以看下面两篇文章:
创建与合并分支-廖雪峰
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000
分支管理策略-廖雪峰
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410364457b9e3d821f4244beb0fd69c61a185ae0000

11,如何把本地仓库提交到远程仓库

当git init初始化一个本地仓库过后,需要提交到远程仓库,我们首先需要关联到远程仓库
git remote add origin git@xx.xx.xx.xx:repos/xxx/xxx/xxx.git
再使用
git remote -v
查看是否关联成功
最后使用
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。
采用此种方法建立的本地分支会和远程分支建立映射关系。
方式二
使用如下命令:
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
采用此种方法建立的本地分支不会和远程分支建立映射关系。

14,git branch -r 显示的不是最新的远程分支列表

业务需要,要拉取其他同事的分支代码,git branch -r 了一下,发现找不到同事的分支,但gitlab中是有这个分支的,就是本地的远程分支列表和远程服务器上的分支不一致,git pull了好几次,也没解决问题,后来git fetch了一下,就好了,后来查了一下git fetch, git fetch会把远程服务器上所有的更新都拉取下来,git pull是把远程分支的代码拉取下来并合并到本地分支

15,git中如何比较分支的区别

16,git如何回退到远程最新的版本

git fetch --all
git reset --hard origin/master(根据本地版本)

17,git rebase到底是什么作用?

git中rebase是用来重新定义版本基线的,基线是仓库初始化或者新开分支最开始的提交记录.这样说来可能有点抽象, 用图来表示应该会更加好容易理解.

image.png

如上图,对于Dev分支来说目前它的基线就是提交记录A,那么重新定义基线的意思就是更换指向1的源头。例如通常我们会去rebase Master分支到Dev.使其变成这样:
image.png

那么现在Dev分支的提交基线就是C了.
那么它在实际应用中有什么作用呢?
我总结了三条:
1,用它来合并提交记录.
2,当出现本地分支提交记录和远程分支提交记录不同的情况下,进行rebase可以减少一个merge过程.
3, 当进行feature分支开发的时候,定期去执行rebase Dev分支的代码可以减少最终feature分支合并到Dev分支的工作量

18,当前仓库关联到一个远程仓库,但是想关联到另外一个远程仓库.

当前仓库关联到的远程仓库:

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)

希望关联到的远程仓库

git@github.com:micaixiaoduanku/MyDemosNew.git

方案1 添加新的分支到新的仓库

git remote rm origin
git remote add origin https://xxx.git 
git push -u origin yourbranch 

方案2 关联到之前的分支进行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.

解决的办法是:

  1. 进入非空目录,假设是 /workdir/proj1
  2. git clone --no-checkout https://git.oschina.net/NextApp/platform.git tmp
  3. mv tmp/.git . #将 tmp 目录下的 .git 目录移到当前目录
  4. rmdir tmp
  5. git reset --hard HEAD
    然后就可以进行各种正常操作了。

22.如何使用cherry-pick同步commit提交.

https://www.jianshu.com/p/08c3f1804b36

23.git 中如何撤销部分修改

修改了两个文件a、b为例,假设需要撤销文件a的修改,则修改后的两个文件:1、如果没有被git add到索引区git checkout a 便可撤销对文件a的修改2、如果被git add到索引区,但没有做git commit提交1)使用git reset将a从索引区移除(但会保留在工作区)git reset HEAD a2)撤销工作区中文件a的修改git checkout a 3、如果已被提交,则需要先回退当前提交到工作区,然后撤销文件a的修改1)回退当前提交到工作区git reset HEAD^2)撤销工作区中文件a的修改git checkout a

作者:佛陀小沙弥
链接:https://www.zhihu.com/question/20039839/answer/125382988
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

24.rebase过程没有提示冲突,但是编译不过

Master A -> B (位置a)
Dev A -> B (位置b)
B (位置b) 这个位置的提交优先于 B (位置a) 的提交, Master A的修改优先于 Dev A的修改,这个时候Dev rebase master就会出现没有冲突提示,但是还是编译不过.
另外一种情况 - 记录于2019.7.9
即便rebase没有冲突,也不能代表可以正常编译。
下面这种情况
Master 可以正常编译
我自己从master切出来的 dev 分支也可以正常编译
但是我rebase了master没有报冲突却不能正常编译了
具体文件是这种情况

image.png

好吧,这很清楚了,其实这样去合并的确是没有冲突的。这意味着rebase过后没有冲突也不能代表一定能编译过.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 三大区域: 工作区 → 缓存区 → 本地仓库 一 、 使用 git config 命令进行配置: git ...
    Manchangdx阅读 2,841评论 0 2
  • 多种多样的工作流使得在项目中实施Git时变得难以选择。这份教程提供了一个出发点,调查企业团队最常见的Git工作流。...
    JSErik阅读 4,382评论 2 8
  • 查看、添加、提交、删除、找回,重置修改文件 git help # 显示command的help git sho...
    Swiftor阅读 2,103评论 0 2
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,409评论 0 7
  • 今日三只蛙: 1、告诉付琳给孙正伊拿体检单 2、控制自己的嘴巴不再说哥 3、和哥上课分开坐,交不同的朋友 ...
    毛竹_30e5阅读 151评论 0 1