git merge会出现的问题
git revert
Git会抱怨:
is a merge but no -m option was given
这是因为你revert的那个commit是一个merge commit,它有两个parent, Git不知道base是选哪个parent,就没法diff,所以就抱怨了,所以你要显示告诉Git用哪一个parent。
git revert sidsad8 -m 1
这样就选parent 1,那么parent 1又是哪一个呢?
参数 -m 就是指定要撤销的那个提交,从左往右,从1开始数
撤销修改的几个场景
*. 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
*. 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
*. 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
工作区、暂存区、本地仓库
关于工作区、暂存区、本地仓库的说明,可查看使用原理视角看 Git
撤销修改的几个场景
*. 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
*. 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
*. 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
添加远程仓库
- 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
- 关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。 - 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
- 远程分支克隆:git clone
remote origin already exists.
将本地仓库关联到远程仓库上
git remote add origin https://github.com/LeventZheng/angular2_practice.git
如果出现错误提示:fatal: remote origin already exists.
git remote rm origin
然后再执行命令,就不会报错了
解决冲突
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
前面的是工作区的代码,后面是仓库代码
分支策略
*. master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
*. dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
*. 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
不是每个分支都要推送到远程分支
- bug分支只用于在本地修复bug,就没必要推到远程了;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
多人协作的工作模式
- 首先,可以试图用git push origin branch-name推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
还可以通过-s用私钥签名一个标签,
git tag -s v0.2 -m "signed version 0.2 released" fec145a
签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错,如果报错,请参考GnuPG帮助文档配置Key。
网友评论