You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
git rebase --continue # 确认 rebase
git rebase --abort # 取消 rebase#确认后,就可以上传到远程了。
如有冲突:当你修改完冲突的文件:执行git add .,然后继续 git rebase --continue就可以解决完冲突并合并到分支上了。
如果没有冲突,或者冲突已经解决,则会出现如下的编辑窗口, 输入:wq 保存并推出:
# This is a combination of 4 commits.#The first commit’s message is:
注释......
# The 2nd commit’s message is:
注释......
# The 3rd commit’s message is:
注释......
# Please enter the commit message for your changes. Lines starting # with ‘#’ will be ignored, and an empty message aborts the commit.
前言
随着 git 的使用普遍化,现在更需要关注使用的规范流程,在此纪录。
目录
漂亮的徽章
(1) 持续集成
(2) npm
(3) 自定义
可以自定义修改 左侧 label 文字,右侧颜色
(4) 其他
commit 日志
更好的 pull
起因
使用 rebase 就感觉所有人都在同一条直线上开发一样,很干净的 log,看着很舒服,而直接使用 pull 的 log 看起来就很乱。
git pull --rebase
git pull
rebase-修改提交历史
合并最近提交的历史,将
ba4358d
到a549037
变为一个 commit准备合并
git rebase -i 36f95d9 | git rebase -i HEAD~3
选择合并
保存完成后,你有两个选择
如有冲突:当你修改完冲突的文件:执行
git add .
,然后继续git rebase --continue
就可以解决完冲突并合并到分支上了。如果没有冲突,或者冲突已经解决,则会出现如下的编辑窗口, 输入
:wq
保存并推出:查看历史,已经改变
git log --oneline d2d71a5 (HEAD -> master) Update README.md 36f95d9 docs 0312afb init
merge 时忽略文件
git config --global merge.ours.driver true
在
uat
分支上的project.config.json
、fetch.js
、app.js
就不会被合并了 !git rebase vs git merge
本地分支:
merge 命令:它会把两个分支的最新快照以及二者最近的共同祖先进行三方合并,合并的结果是生成一个新的快照(并提交)。
rebase 命令:它将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。
例子:
develop-yue 日志
uat 日志
分支管理策略
(1)git flow 工作流
主线分支(长期维护)
master
:主干分支,,这个分支最近发布到生产环境的代码,最近发布的 Release, 这个分支只能从其他分支合并,不能在这个分支直接修改,每个 Commit 都应该打 Tag (对应线上生产环境)develop
: 开发分支,各个任务分支都往这上边合并辅助分支
feature-new
:新任务分支(服务于 develop),开发完毕应该合并到 develop(没写完就不要合进去了,不然影响 release,合并完建议删除)release-vxxx
:可以理解为发版分支,基于 develop ,一定周期内的开发任务统一在一个 release 中测试,测试中出现的 BUG 直接 commit 在 release 分支中,测试完毕后后并入到 develop 与 masterhotfix
:热修复分支(服务于 master),一般用于处理紧急 BUG,开发完毕后合并到 develop 以及 master开发分支 develop:
任务(功能)分支 feature:
发版分支 release:
热修复分支 hotfix:
(2) 我们使用的模型
主线分支
prod
: 主干分支,相当于 master + releaseuat
: 开发分支(dev)辅助分支
dev-yue
:新任务分支(按人划分,服务于 uat)dev-joe
:新任务分支下面是合并分支常规操作,自己的开发分支并入 dev(uat) 分支。
git 仓库迁移并保留 commit 历史
# 修改已注册的远端仓库地址 git remote set-url origin [newUrl]
git 子模块
在一个项目中使用另一个项目,并保证项目间相对独立,这就是 git 的子模块可以实现的效果。
创建子模块
先进入父仓库目录下,然后执行命令:
执行上面命令后,在父仓库根目录增加了.gitmodule 文件。
[submodule "submodule-name"] path = submodule-name url = http://gitlab.it.xxx.com/submodule-name.git branch = dev
git 子模块使用
git clone 子模块参与编译
使用了子模块的项目并不会将子模块的所有代码提交上去,而会保留一个空文件夹与版本 id 指向 (submodule-name @ 462b5421),在真实编译发布的时候需要先 clone。
git-创建一个空分支
使用 git checkout 的--orphan 参数,该命令会创建一个名为 doc 的分支,并且该分支下有前一个分支下的所有文件。
git rm -rf .
git commit -am "new branch for documentation"
如果没有任何文件提交的话,分支是看不到的,可以创建一个新文件后再次提交则新创建的 branch 就会显示出来。
git stash
如果遇到冲突后,可以:
保存完成后,你有两个选择
git revert 与 git reset 的区别
git reset 可以回退 Git 的历史记录。例如当前分支有三个记录,并且 HEAD 指向 c 记录:
c <- HEAD b a
如果我们想回退到 b 记录,只要执行 git reset b 就可以了:
接着使用 git push -f 将回退版本后的分支强制推送到远程仓库,这样本地分支和远程分支就同步了。
git revert 也可以撤销记录,只不过它撤销的记录不会消失,这一点和 git reset 不一样。git reset 撤销的记录就跟消失了一样。
现在我们用 git revert 来重新演示下刚才的操作:
如果我们执行 git revert b,则会在当前分支上再生成一个新的 commit 记录,变成 a b c b',这个 b' 的状态和记录 b 是一样的。
也就是说,执行 git reset b 后,当前的分支记录会变成 a b。执行 git revert b 后,当前的分支记录会变成 a b c b'。
如果你想让别人知道你撤销过记录,就使用 git revert,因为它会留下撤销的记录,否则用 git reset。
git 合并另一个仓库
基于一个 git 脚手架项目基础上开发了一个新项目,同时这个脚手架项目也会更新迭代,这时就需要把脚手架项目合并到新开发的项目中来,编译同步合并脚手架项目仓库的代码。
把 target 作为远程仓库,添加到本地仓库 origin 中,设置别名 target。
在上面执行 merge 后追加 --allow-unrelated-histories,是为了避免因两个分支没有取得联系而报 fatal: refusing to merge unrelated histories 的错误信息。
github actions
https://github.com/yanyue404/my-bookmarks
github.dev 写作
https://github.dev/yanyue404/my-bookmarks
git 修改 commit 作者和邮箱
原因
没有为项目做 git 上的配置,于是使用了全局的 git 配置。
设置项目级:
将所有错误的 name,email 修改为正确的配置。
下面通过
git rebase -i
命令 重写历史选择修改范围
输出如下
将要修改的提交所在行 pick 改为 e 保存退出 (e 是 edit 的意思)
通过命令一条一条修改 (无法修改时先执行 rebase 的 continue 命令再修改 commit )
直至
可以推送了
github 搜索
参考链接
The text was updated successfully, but these errors were encountered: