前提
当前公司业务是用 rebase 合并代码,则需要修改 git 拉取的默认配置
- 全局修改 pull 的默认配置 rebase:git config –global –add pull.rebase true
- 查看修改成功与否:git config –global -l,找到 pull.rebase=true 则为成功
分析 studydemo 文件夹的树状图
1 | - .git |
解决合并分支的问题 — feature5 合并 feature4
时间线乱序
- 方法一(命令行操作):
- 先撤回已提交记录:git reset HEAD^ // 这个只能撤回一条最新记录
- 贮藏未提交的记录:git stash
- 拉取当前分支的最新记录:git pull
- 弹出贮藏:git pop stash
- 重新提交: git commit -m “msg”
- 推送到远程:git push -f
- 方法二(命令行+tortoiseGit):
- 撤回已提交记录: git reset HEAD^
- 重新提交合并上一次提交,推送强制覆盖已知
- 方法三:
- 如果没有什么删除分支之类的,合完,合并记录
- 获取需要合并记录的 commit id:git log
- 进入交互式的 rebase 模式:
git rebase -i <commit ID>
- 输入 i 进入可编辑模式
- 将需要合并的提交记录从pick改为squash或者fixup
- squash:将当前提交记录与上一提交记录合并,同时将提交信息合并为一个
- fixup:将当前提交记录与上一提交记录合并,但不保留当前提交记录
- 按 esc 输入:wq 退出
- 修改合并后的 commit message: git commit –amend
- 强制推送修改后的记录: git push –force
切分支一直提示:The following untracked working tree files would be overwritten by checkout…
- 方法一: 保留未追踪的文件
- git add .
- git stash
- 执行本来想执行的命令
- 方法二:不想要这些文件,直接覆盖
- git checkout -f 目标分支
遇到 index.lock 文件直接去当前目录的.git 下删除 index.lock
直接拉取远程的其它分支 — feature5拉取feature1
- 提示 (no branch, rebasing feature1)
- 解决方案,点击跳转
当主干分支有改变,但当前分支拉取的时候主干没变的情况
这里用 merge 时间先会乱所以用 rebase,本质就是合并主干代码到分支
- 贮藏一下当前分支未提交的代码:git stash
- 确认当前所在分支: git branch
- 切换分支到主干: git checkout master
- 拉取远程的主干: git pull origin master
- 切换到要合并的分支: git checkout 分支名
- 开始变基:git rebase master(当前分支变基主干,变基后的内容在当前分支中更新)
- 如果变基有冲突,看提示那个文件,或者看 vscode 那个文件标红了,
- 解决标红后 git add .
- 然后 git rebase –continue
- 查看日志: git log –pretty=oneline –graph(确认是否变基成功)
- 尝试推送到远程分支,发现果然不行:git push -u origin 远程分支名(rebase 变基后,本地和远程的记录不同,所以推送不成功)
- 强推到远程分支:git push -f origin 远程分支名
- 弹出贮藏:git pop
各个分支已经推送到远程后,把分支合并到 master
- 切换到 master 分支:git checkout master
- 确保 master 分支,是最新记录:git pull origin master
- 合并分支:git merge 要合并到master的分支
- 查看日志: git log –pretty=oneline –graph(确认是否合并成功)
- 推送分支到 master:git push origin master