git学习笔记
git学习笔记
常用命令
# 拷贝远程代码仓库
git clone remote_repo_url
# 切换分支
git checkout branch_name
# 创建分支
git branch new_branch_name branch_name(or hash)
# 临时代码栈
git stash(or git stash save "comment")
# 重新应用修改缓存
git stash pop(git stash apply)
合并修改
第一种方式:git merge
第二种方式:git rebase
关于第一种方式:
举个例子,合并dev分支修改到master分支
git checkout master
git merge dev
两种情况,
-
dev和master没有分叉,就是版本是一前一后,则只是移动master分支和HEAD指针。称为快速合并
-
dev和master有分叉,即dev的版本没有更新别人在master上面的更新,则在当前分支创建新节点,并连接这两条路。也称为非快速合并
关于第二种方式:
举个例子,合并有分叉的两个分支
git checkout master
git rebase dev
rebase会将合入分支上超前的节点在待合入分支上重新提交一遍,即在master分支上重走一遍dev分支的提交。
[1] The figure comes from https://yanhaijing.com/git/2017/07/14/four-method-for-git-merge/
举个例子,合并分支的多个提交
# 第一步选取分支上需要合并的区域
git rebase -i start_hash end_hash
# 选择需要合并的提交,改为s,使用的提交默认为p;保存退出
# 取消合并
git rebase --abort
# 继续合并
git rebase --continue
注:修改默认编辑器,git config -global core.editor vim
冲突处理
在merge和rebase等代码合并操作时,容易发生冲突问题,造成原因是两个分支相同文件相同位置的的不同操作。
总结:本人在开发模型的时候,经常需要控制模型的版本或者实验参数,所以有时候版本之间的关系不是迭代关系,是多版本关系,即对同一个地方有不同的操作,因此在合并的时候容易发生冲突,这其实是不好的习惯,如果单人开发都需要处理冲突,证明开发代码版本管理方式不够优秀。
因此,解决的方案是:需要保存版本并进行下一个模型方式的尝试可以新建分支,但不在新建分支上面进行开发,仍然在主分支上开发,分支只是版本的划分。一个原则,开发之前多想想merge,能快速合并的方式处理绝不其他方式,说白了,保证版本是线性的,而不是多叉树(狗头)。
每天进步一点点!
©版权声明
文章版权归作者所有,未经允许请勿转载。