Gitee 工作流说明
# 继续添加提交
# 您可能会在前次提交的基础上,继续编辑构建并测试更多内容,可以使用 `commit --amend` 继续添加提交。
git commit --amend
git push -f
rebase详解——非常精髓
git merge和git rebase的区别, 切记:永远用rebase
Git使用Merge和Rebase区别及心得技巧
如果您提交了一个PR以后,根据检视意见完成修改并再次提交了PR,您不想让审阅者看到多次提交的PR,因为这不便于继续在检视中修改,那么您可以合并提交的PR。合并提交的PR是通过压缩Commit来实现的。
rebase通常是发生在自己的个人branch上。
rebase 的冲突是一个一个解决,如果有10个冲突,先解决第1个,然后才会出现第2个冲突,直到所有冲突解决完。
merge 是所有的冲突都会显示出来。
rebase工作流
冲突全部解决,rebase成功。
git rebase
while(存在冲突) {
git status
找到当前冲突文件,编辑解决冲突
git add -u
git rebase --continue
if( git rebase --abort )
break;
}
merge工作流
git pull
编辑冲突文件
git add .
git commit -m "feat: this is a comment"
git push
先在本地分支上查看日志。
git log
把顶部的n个提交记录聚合到一起进入,注意n是一个数字。
把需要压缩的日志前面的pick都改成s,s是squash的缩写。注意必须保留一个pick,如果将所有的pick都改成了s就没有合并的目标了,会发生错误。修改完成以后,按ESC键,再输入:wq
,会跳出一个界面,问你是否进入编辑提交备注的页面,输入e以后,进入合并提交备注的页面。请把需要合并的备注都删掉,只保留合并目标的备注,再按ESC键,输入:wq
保存退出即可。
# 如果存在该文件,删除rebase-merge
rm -fr ".git/rebase-merge"
git rebase -i HEAD~n
# 修改合并的配置
git rebase --edit-todo
解决冲突
# 1. 查看冲突
git status
# 2. 手动解决冲突
# 3. 继续add
git add -u
# 4. 继续合并提交
git rebase --continue
# 5. 重复1-4步骤,直到所有冲突都解决了
如果rebase过程中,你想中途退出,恢复rebase前的代码则可以用指令:
git rebase --abort
pull远程分支
git pull origin yourbranch
push推送远程仓库。
git push -f origin yourbranch
回到gitee上的PR提交页面查看,您就可以看到之前的提交已经合并了。
clone远程仓库到本地
# 把远程 fork 仓库复制到本地
git clone https://gitee.com/$user_name/$repository_name
# 设置本地工作目录的 upstream 源(被 fork 的上游仓库)
git remote add upstream https://gitee.com/openeuler/$repository_name
# 设置同步方式,此处
git remote set-url --push upstream no_push
更新本地分支
git fetch upstream
git checkout master
git rebase upstream/master
拉分支
git checkout -b myfeature
然后在 myfeature
分支上编辑和修改代码。
保持分支和master同步
执行merge的时候,请不要使用 git pull
,因为这种方式会使提交历史变得混乱,并使代码更难被理解。
# While on your myfeature branch
git fetch upstream
git rebase upstream/master
提交变更
git add .
git commit -m "提交原因"
您可能会在前次提交的基础上,继续编辑构建并测试更多内容,可以使用 commit --amend
继续添加提交。
push推送到远程
git push -f origin myfeature
创建一个分支并用upstream进行同步
# create a branch
git checkout -b myrevert
# sync the branch with upstream
git fetch upstream
git rebase upstream/master
如果还原的分支是:merge commit
# SHA is the hash of the merge commit you wish to revert
git revert -m 1 SHA
如果还原的分支是:single commit
# SHA is the hash of the single commit you wish to revert
git revert SHA
push推送到远程
git push ${your_remote_name} myrevert
如何处理代码冲突
先将分支切换到master上,并完成master的rebase
git checkout master
git fetch upstream
git rebase upstream/master
将分支切换到您使用的分支上,并开始rebase
git checkout yourbranch
git rebase master
用vi等工具查看冲突
解决冲突以后,再把修改提交上去
git add .
git rebase --continue
git push -f origin yourbranch
$ rm -rf ./.git/rebase-merge
rm: cannot remove './.git/rebase-merge': Device or resource busy
错误原因:
未知
解决办法:
用腾讯电脑管家【文件粉碎】功能,彻底删除该文件
.git/rebase-merge/head-name
导致rebase失败执行git rebase过程中断后报No such file or directory错误的解决方法
$ git rebase --continue
warning: could not read '.git/rebase-merge/head-name': No such file or directory
解决办法:
将git rebase产生的中间文件删除,重新rebase
rm -rf .git/rebase-merge
git rebase yourbranch