原文:https://www.jianshu.com/p/08c3f1804b36
git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交.
git cherry-pick <commit id>
注意:当执行完 cherry-pick 以后,将会生成一个新的提交;这个新的提交的哈希值和原来的不同,但标识名一样;
例如:
$ git checkout v2.0分支
$ git cherry-pick 38361a55 # 这个 38361a55 号码,位于v3.0分支中:
> $ git log
> commit 38361a55138140827b31b72f8bbfd88b3705d77a
> Author: Justin [Justin@xxx.com](https://link.jianshu.com?t=mailto:Justin@xxx.com)
> Date: Sat Dec 10 00:11:44 2016 +0800
1. 如果顺利,就会正常提交。结果:
> Finished one cherry-pick.
> On branch v2.0分支
> Your branch is ahead of 'origin/old_cc' by 3 commits.
2. 如果在cherry-pick 的过程中出现了冲突
> Automatic cherry-pick failed.
> After resolving the conflicts,mark the corrected paths with 'git add <paths>' or 'git rm <paths>'and commit the result with:
> git commit -c 15a2b6c61927e5aed6111de89ad9dafba939a90b
> **或者:**
> error: could not apply 0549563... dev
> hint: after resolving the conflicts, mark the corrected paths
> hint: with 'git add <paths>' or 'git rm <paths>'
> hint: and commit the result with 'git commit'
就跟普通的冲突一样,手工解决:
2.1 $ git status # 看哪些文件出现冲突
both modified: app/models/MainActivity.java
2.2 $ vim app/models/MainActivity.java # 手动解决它。
2.3 $ git add app/models/MainActivity.java
2.4 git commit -c <新的commit号码>
2.5 再次cherry-pick剩余commit
若提示:
> error: a cherry-pick or revert is already in progress
> hint: try "git cherry-pick (--continue | --quit | --abort)"
> fatal: cherry-pick failed
则执行对应操作:
> _git cherry-pick_ --continue
> _git cherry-pick_ --quit
> _git cherry-pick_ --abort
前者表示把
后者有”^”标志的表示把
其中,
注:以上合并,需要手动push代码。
Unable to negotiate with 106.52.160.162 port 22: no matching host key type found. Their offer: ssh-rsa fatal: Could not read from remote repository.
使用git hooks(post-receive)实现简单的远程自动部署
linux下,设置git免密码操作
**git cherry-pick**可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交.
在使用Git的过程中,有时候会因为一些误操作,比如reset、rebase、merge等。特别是在Commit之后又执行了`git reset --hard HEAD`强制回滚本地记录以及文件到服务器版本,导致本地做的修改全部恢复到Git当前分支的服务器版本,同时自己的Commmit记录也消失了。碰到这种情况,不要慌,我们在Git上做的任何操作都只是在原来之前的操作上做修改,并且会被记录下来保存,也就是说无论你做了什么,对于Git来说都可以进行回滚操作。
它的原理很简单,就是将代码提交的历史,按照两分法不断缩小定位。所谓&quot;两分法&quot;,就是将代码历史一分为二,确定问题出在前半部分,还是后半部分,不断执行这个过程,直到范围缩小到某一次代码提交。
当在git操作log,如`git log`后,然后非正常退出,即使用`CTRL+C`退出,这个时候git输入命令就不会显示了,只有光标,这时怎么办?
.gitignore文件配置不生效
git修改当前项目用户
Git修改最近一次已经提交了的commit及push
git常用命令,git查看某个文件的修改记录,分支备注
通过设置git-diff driver,结合.gitattributes文件,使git diff命令忽略某些目录。例如我们只希望看到比较src目录,不希望看到比较dist目录
学习这本书的目的是让你了解版本控制,并且尽可能快速简单的掌握 Git。但是和另外一些关于介绍版本控制的图书不一样,阅读这本书并不需要你有很专业的 IT 或者电脑背景知识,它也面向那些编程的初学者,软件构架师,或者是项目经理。在技术方面你也不需要有很多专业知识,我们会以循序渐进的方式帮助你来理解版本控制和掌握 Git。
git如何打包增量文件?
github push时免密码