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

两种情况,

  1. dev和master没有分叉,就是版本是一前一后,则只是移动master分支和HEAD指针。称为快速合并

  2. 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,能快速合并的方式处理绝不其他方式,说白了,保证版本是线性的,而不是多叉树(狗头)。

posted @ 2021-08-12 19:33  小肚腩的世界  阅读(30)  评论(0编辑  收藏  举报