美文网首页
Git使用一些常见问题记录(持续更新ing)

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

作者: e小e | 来源:发表于2017-12-19 15:45 被阅读48次

    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
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/jnrmwxtx.html