Git使用一些常见问题记录(持续更新ing)
1,如何在mac中生存isa_key
1.下载安装git
Mac上是自带git的,所以不需要自己下载和安装
2.生成SSH KEY
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模式呢?
如图,在当前分支为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是用来重新定义版本基线的,基线是仓库初始化或者新开分支最开始的提交记录.这样说来可能有点抽象, 用图来表示应该会更加好容易理解.
如上图,对于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.
解决的办法是:
- 进入非空目录,假设是 /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提交.
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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。