分类 Git 下的文章 - 青蓝鱼的博客-没有bug的代码是不完美的
分类 Git 下的文章 - 青蓝鱼的博客-没有bug的代码是不完美的
终于找到这篇文章了,感谢作者的分享!
https://fishfive.top/index.php/archives/29/
终于找到这篇文章了,感谢作者的分享!
受益匪浅,感谢博主。
该回复疑似异常,已被系统拦截!
1
111
666
# 图片回复
666
学到了
666
hello word
首页
关于
?
归档
留言
统计
导航
更多
github
友链
推荐
百度
搜 索
1
Nginx-Quic重新编译Nginx支持HTTP3
356 阅读
2
Centos7和Centos8网卡配置
269 阅读
3
六种好看的css按钮效果
189 阅读
4
node.js简单的web服务demo
159 阅读
5
JavaScript实现静态图片局部流动效果
156 阅读
默认分类
html
css
JavaScript
React
Vue
Git
centos
node.js
php
nginx
http
登录
搜 索
https://fishfive.top
累计撰写
27
篇文章
累计收到
16
条评论
首页
栏目
默认分类
html
css
JavaScript
React
Vue
Git
centos
node.js
php
nginx
http
页面
关于
归档
留言
统计
导航
github
友链
推荐
百度
用户登录
登录
找到
2
篇与
Git
相关的结果
2022-09-07
git-flow 的工作流程
什么是 git-flow?一旦安装安装 git-flow,你将会拥有一些扩展命令。这些命令会在一个预定义的顺序下自动执行多个操作。是的,这就是我们的工作流程!git-flow 并不是要替代 Git,它仅仅是非常聪明有效地把标准的 Git 命令用脚本组合了起来。严格来讲,你并不需要安装什么特别的东西就可以使用 git-flow 工作流程。你只需要了解,哪些工作流程是由哪些单独的任务所组成的,并且附带上正确的参数,以及在一个正确的顺序下简单执行那些对应的 Git 命令就可以了。当然,如果你使用 git-flow 脚本就会更加方便了,你就不需要把这些命令和顺序都记在脑子里。Master分支Master分支作为唯一一个正式对外发布的分支,是所有分支里最稳定的。这是因为,只有经过了严格审核和测试,并且在当前发布计划里的特性,才会被合并到master分支。当某个版本发布的时候,我们通常还会为master分支加上带有相应版本号的tag。Develop分支Develop分支是根据master分支创建出来的,它作为一种集成分支(Integration Branch),是专门用来集成开发完成的各种特性的。Develop分支通常具有更加详细和完整的提交历史,包括一些很细节的提交记录。而master分支则因为是面向版本发布的,所以它的提交历史会略去这些细节,显得比较精简。Feature分支Feature分支是根据develop分支创建出来的,Gitflow工作流里的每个新特性都有自己的feature分支,这一点和特性分支工作流是一样的。这些分支除了在开发人员的本地存在以外,也可以被推送到共享的远程Git库,作为工作备份,以及与其他人协同工作的基础。当特性开发结束以后,这些分支上的工作会被合并到develop分支。但feature分支从来不会直接和master分支打交道。Release分支当积累了足够多的已完成特性,或者预定的系统发布周期临近的时候,我们就会从develop分支创建出一个release分支,专门用来做和当前版本发布有关的工作。Release分支一旦开出来以后,就不允许再有新的特性被加入到这个分支了,只有bug修复或者文档编辑之类的工作才允许进入该分支。Release分支上的内容最终会被合并到master分支,等版本发布的时候,我们通常还会为master分支加上带有相应版本号的tag。同时,release分支也会被合并到develop分支。在release分支活跃其间,develop分支也一直处于Open状态。Release分支上的内容代表当前版本在发布之前的准备工作,develop分支上的内容则代表下一个版本的开发工作,两者是可以并行展开的。Hotfix分支Hotfix分支不从是develop分支创建出来的,而是直接根据master分支创建得到的,其目的是为了给运行在生产环境中的系统快速提供补丁,同时确保不会给正在其他上分支进行的工作造成影响。当hotfix分支上的工作完成以后,可以合并到master分支和develop分支,以及当前的release分支。如果有版本的更新,也可以为master分支打上相应的tag。上面提到的所有分支,从稳定性的角度来说,每一种分支都处在各自不同的层次。如果当前分支的代码达到了更加稳定的水平,那它就可以向更稳定的分支进行合并了。如何工作?Vincent Driessen不仅定义了Gitflow的工作流程,还提供了一个相应的命令行工具git-flow,可以简化我们在执行Gitflow工作流时,对每一个分支的各种繁琐的操作。它实际上是对Git命令行的封装。接下来,我们就利用这个工具演示一下整个Gitflow工作流。如果你使用的是Hello Git的实验环境,那么git-flow已经提前安装好了,否则需要自己手动安装。第一步,在服务器上建立一个远程Git库,供所有人使用:$ ssh git@my-git-remote git> create test-gitflow Initialized empty Git repository in /home/git/test-gitflow.git/ git> exit Connection to my-git-remote closed.第二步,William把远程库克隆到本地:$ git clone git@my-git-remote:~/test-gitflow.git Cloning into 'test-gitflow'... warning: You appear to have cloned an empty repository. cd test-gitflow/并生成项目的初始提交:$ touch README $ git add README $ git commit -m 'Initial commit' [master (root-commit) db64af2] Initial commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README然后把它推送到远程:$ git push Counting objects: 3, done. Writing objects: 100% (3/3), 208 bytes | 17.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To my-git-remote:~/test-gitflow.git * [new branch] master -> master第三步,William在他本地的工作目录下执行git flow init命令,对本地库进行初始化:$ git flow init Which branch should be used for bringing forth production releases? - master Branch name for production releases: [master] Branch name for "next release" development: [develop] How to name your supporting branch prefixes? Feature branches? [feature/] Bugfix branches? [bugfix/] Release branches? [release/] Hotfix branches? [hotfix/] Support branches? [support/] Version tag prefix? [] Hooks and filters directory? [/root/test-gitflow/.git/hooks] git-flow的初始化过程包含一系列问答环节,主要涉及各个分支的名称以及名称前缀的配置。如果我们选择默认配置,就可以一直按回车键直到命令执行完毕。这个时候,我们会发现本地除了master分支以外,还会多出一个develop分支。并且,git-flow已经替我们把当前分支切换到了develop分支:$ git branch * develop master第四步,William开始新特性xyz的开发,执行git flow feature start命令,并传入特性的名称:$ git flow feature start xyz Switched to a new branch 'feature/xyz' Summary of actions: - A new branch 'feature/xyz' was created, based on 'develop' - You are now on branch 'feature/xyz' Now, start committing on your feature. When done, use: git flow feature finish xyzgit-flow会自动为我们从develop分支创建出一个名叫feature/xyz的分支,并把当前分支切换到该分支。现在,William可以在feature/xyz分支上进行新特性的开发,并生成相应的提交记录了:$ vi README $ cat README Git workflows * Gitflow workflow $ git commit -am 'Working on feature/xyz' [feature/xyz 48d92a9] Working on feature/xyz 1 file changed, 2 insertions(+)然后再把提交记录推送到远程,可以作为当前工作的备份,也可以让其他人访问到他的工作,还可以通过Pull Request发起讨论:$ git push origin feature/xyz Counting objects: 3, done. Writing objects: 100% (3/3), 269 bytes | 24.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To my-git-remote:~/test-gitflow.git * [new branch] feature/xyz -> feature/xyz第五步,Nicole接到了一个hotfix的任务,她和William一样,也把远程库克隆到本地,并利用git flow init命令对本地库进行了初始化,然后执行git flow hotfix start命令,并传入hotfix的名称:$ git flow hotfix start 123 Switched to a new branch 'hotfix/123' Summary of actions: - A new branch 'hotfix/123' was created, based on 'master' - You are now on branch 'hotfix/123' Follow-up actions: - Start committing your hot fixes - Bump the version number now! - When done, run: git flow hotfix finish '123'git-flow会自动为我们直接从master分支创建出一个名叫hotfix/123的分支,并把当前分支切换到该分支。现在,Nicole可以在hotfix/123分支上进行hotfix的开发,并生成相应的提交记录了:$ touch LICENSE $ git add LICENSE $ git commit -m 'Working on hotfix/123' [hotfix/123 1a70748] Working on hotfix/123 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 LICENSE然后再把提交记录推送到远程,可以作为当前工作的备份,也可以让其他人访问到她的工作,还可以通过Pull Request发起讨论:$ git push origin hotfix/123 Counting objects: 2, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 245 bytes | 27.00 KiB/s, done. Total 2 (delta 0), reused 0 (delta 0) To my-git-remote:~/test-gitflow.git * [new branch] hotfix/123 -> hotfix/123当hotfix的开发工作结束以后,再执行git flow hotfix finish命令,并传入hotfix的名称:$ git flow hotfix finish 123 Switched to branch 'master' Your branch is up to date with 'origin/master'. Merge made by the 'recursive' strategy. LICENSE | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 LICENSE Switched to branch 'develop' Merge made by the 'recursive' strategy. LICENSE | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 LICENSE To my-git-remote:~/test-gitflow.git - [deleted] hotfix/123 Deleted branch hotfix/123 (was 1a70748). Summary of actions: - Hotfix branch 'hotfix/123' has been merged into 'master' - The hotfix was tagged '123' - Hotfix tag '123' has been back-merged into 'develop' - Hotfix branch 'hotfix/123' has been locally deleted; it has been remotely deleted from 'origin' - You are now on branch 'develop'git-flow会自动为我们把hotfix/123分支上的工作合并到master分支和develop分支,并给master分支加上hotfix的tag,然后再把hotfix分支分别从本地库和远程库里删掉,最后再把当前分支切换到develop。第六步,William的新特性开发工作完成了,执行git flow feature finish命令,并传入特性的名称:$ git flow feature finish xyz Switched to branch 'develop' Updating db64af2..48d92a9 Fast-forward README | 2 ++ 1 file changed, 2 insertions(+) To my-git-remote:~/test-gitflow.git - [deleted] feature/xyz Deleted branch feature/xyz (was 48d92a9). Summary of actions: - The feature branch 'feature/xyz' was merged into 'develop' - Feature branch 'feature/xyz' has been locally deleted; it has been remotely deleted from 'origin' - You are now on branch 'develop'git-flow会自动为我们把分支feature/xyz上的工作合并到develop分支,并把该分支分别从本地库和远程库里删掉,然后再把当前分支切换到develop。第七步,当前版本abc即将要发布了,William执行git flow release start命令,并传入版本号:$ git flow release start abc Switched to a new branch 'release/abc' Summary of actions: - A new branch 'release/abc' was created, based on 'develop' - You are now on branch 'release/abc' Follow-up actions: - Bump the version number now! - Start committing last-minute fixes in preparing your release - When done, run: git flow release finish 'abc'git-flow会根据develop分支自动为我们创建出一个名叫release/abc的分支,专门用于发布准备,然后把当前分支切换到该分支。release/abc分支一旦创建,就不能再往里面添加新特性了,但可以继续做一些bug修复的工作:$ vi README $ cat README Git workflows * Gitflow workflow * ...生成相应的提交记录:$ git commit -am 'Working on release/abc' [release/abc 79f1e5e] Working on release/abc 1 file changed, 1 insertion(+)然后推送到远程:$ git push origin release/abc Counting objects: 6, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (6/6), 510 bytes | 19.00 KiB/s, done. Total 6 (delta 0), reused 0 (delta 0) To my-git-remote:~/test-gitflow.git * [new branch] release/abc -> release/abc最后,发布工作结束,执行git flow release命令,并传入版本号: $ git flow release finish abc Switched to branch 'master' Your branch is up to date with 'origin/master'. Merge made by the 'recursive' strategy. README | 3 +++ 1 file changed, 3 insertions(+) Already on 'master' Your branch is ahead of 'origin/master' by 3 commits. (use "git push" to publish your local commits) Switched to branch 'develop' Merge made by the 'recursive' strategy. README | 1 + 1 file changed, 1 insertion(+) To my-git-remote:~/test-gitflow.git - [deleted] release/abc Deleted branch release/abc (was 79f1e5e). Summary of actions: - Release branch 'release/abc' has been merged into 'master' - The release was tagged 'abc' - Release tag 'abc' has been back-merged into 'develop' - Release branch 'release/abc' has been locally deleted; it has been remotely deleted from 'origin' - You are now on branch 'develop'git-flow会自动为我们把release/abc分支上的工作合并到master分支和develop分支,并在master分支上为当前版本加上tag。然后把release分支分别从本地库和远程库里删掉,最后再切换回develop分支,一个版本发布周期就结束了。
2022年09月07日
63 阅读
0 评论
0 点赞
2022-05-24
Git 命令
几个专用名词的译名如下Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-name] # 下载一个项目和它的整个代码历史 $ git clone [url] 二、配置 # 显示当前的Git配置 $ git config --list # 编辑Git配置文件 $ git config -e [--global] # 设置提交代码时的用户信息 $ git config [--global] user.name "[name]" $ git config [--global] user.email "[email address]" 三、增加/删除文件 # 添加指定文件到暂存区 $ git add [file1] [file2] ... # 添加指定目录到暂存区,包括子目录 $ git add [dir] # 添加当前目录的所有文件到暂存区 $ git add . # 添加每个变化前,都会要求确认 # 对于同一个文件的多处变化,可以实现分次提交 $ git add -p # 删除工作区文件,并且将这次删除放入暂存区 $ git rm [file1] [file2] ... # 停止追踪指定文件,但该文件会保留在工作区 $ git rm --cached [file] # 改名文件,并且将这个改名放入暂存区 $ git mv [file-original] [file-renamed] 四、代码提交 # 提交暂存区到仓库区 $ git commit -m [message] # 提交暂存区的指定文件到仓库区 $ git commit [file1] [file2] ... -m [message] # 提交工作区自上次commit之后的变化,直接到仓库区 $ git commit -a # 提交时显示所有diff信息 $ git commit -v # 使用一次新的commit,替代上一次提交 # 如果代码没有任何新变化,则用来改写上一次commit的提交信息 $ git commit --amend -m [message] # 重做上一次commit,并包括指定文件的新变化 $ git commit --amend [file1] [file2] ...五、分支 # 列出所有本地分支 $ git branch # 列出所有远程分支 $ git branch -r # 列出所有本地分支和远程分支 $ git branch -a # 新建一个分支,但依然停留在当前分支 $ git branch [branch-name] # 新建一个分支,并切换到该分支 $ git checkout -b [branch] # 新建一个分支,指向指定commit $ git branch [branch] [commit] # 新建一个分支,与指定的远程分支建立追踪关系 $ git branch --track [branch] [remote-branch] # 切换到指定分支,并更新工作区 $ git checkout [branch-name] # 切换到上一个分支 $ git checkout - # 建立追踪关系,在现有分支与指定的远程分支之间 $ git branch --set-upstream [branch] [remote-branch] # 合并指定分支到当前分支 $ git merge [branch] # 选择一个commit,合并进当前分支 $ git cherry-pick [commit] # 删除分支 $ git branch -d [branch-name] # 删除远程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch] 六、标签 # 列出所有tag $ git tag # 新建一个tag在当前commit $ git tag [tag] # 新建一个tag在指定commit $ git tag [tag] [commit] # 删除本地tag $ git tag -d [tag] # 删除远程tag $ git push origin :refs/tags/[tagName] # 查看tag信息 $ git show [tag] # 提交指定tag $ git push [remote] [tag] # 提交所有tag $ git push [remote] --tags # 新建一个分支,指向某个tag $ git checkout -b [branch] [tag] 七、查看信息# 显示有变更的文件 $ git status # 显示当前分支的版本历史 $ git log # 显示commit历史,以及每次commit发生变更的文件 $ git log --stat # 搜索提交历史,根据关键词 $ git log -S [keyword] # 显示某个commit之后的所有变动,每个commit占据一行 $ git log [tag] HEAD --pretty=format:%s # 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 $ git log [tag] HEAD --grep feature # 显示某个文件的版本历史,包括文件改名 $ git log --follow [file] $ git whatchanged [file] # 显示指定文件相关的每一次diff $ git log -p [file] # 显示过去5次提交 $ git log -5 --pretty --oneline # 显示所有提交过的用户,按提交次数排序 $ git shortlog -sn # 显示指定文件是什么人在什么时间修改过 $ git blame [file] # 显示暂存区和工作区的差异 $ git diff # 显示暂存区和上一个commit的差异 $ git diff --cached [file] # 显示工作区与当前分支最新commit之间的差异 $ git diff HEAD # 显示两次提交之间的差异 $ git diff [first-branch]...[second-branch] # 显示今天你写了多少行代码 $ git diff --shortstat "@" # 显示某次提交的元数据和内容变化 $ git show [commit] # 显示某次提交发生变化的文件 $ git show --name-only [commit] # 显示某次提交时,某个文件的内容 $ git show [commit]:[filename] # 显示当前分支的最近几次提交 $ git reflog八、远程同步 # 下载远程仓库的所有变动 $ git fetch [remote] # 显示所有远程仓库 $ git remote -v # 显示某个远程仓库的信息 $ git remote show [remote] # 增加一个新的远程仓库,并命名 $ git remote add [shortname] [url] # 取回远程仓库的变化,并与本地分支合并 $ git pull [remote] [branch] # 上传本地指定分支到远程仓库 $ git push [remote] [branch] # 强行推送当前分支到远程仓库,即使有冲突 $ git push [remote] --force # 推送所有分支到远程仓库 $ git push [remote] --all九、撤销# 恢复暂存区的指定文件到工作区 $ git checkout [file] # 恢复某个commit的指定文件到暂存区和工作区 $ git checkout [commit] [file] # 恢复暂存区的所有文件到工作区 $ git checkout . # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 $ git reset [file] # 重置暂存区与工作区,与上一次commit保持一致 $ git reset --hard # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变 $ git reset [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致 $ git reset --hard [commit] # 重置当前HEAD为指定commit,但保持暂存区和工作区不变 $ git reset --keep [commit] # 新建一个commit,用来撤销指定commit # 后者的所有变化都将被前者抵消,并且应用到当前分支 $ git revert [commit] # 暂时将未提交的变化移除,稍后再移入 $ git stash $ git stash pop十、其他# 生成一个可供发布的压缩包 $ git archive
2022年05月24日
59 阅读
0 评论
0 点赞