文章目录
- 一、Git工作流
- 二、分支管理
- 三、Git命令操作规范
- 1. 切到develop分支,更新develop最新代码
- 2. 新建feature分支,开发新功能
- 3. 完成feature分支,合并到develop分支
- 4. 当某个版本所有的 feature 分支均合并到 develop 分支,就可以切出 release 分支,准备发布新版本,提交测试并进行 bug fix
- 5. 所有 bug 修复完成,准备发布新版本
- 6. 线上出现 bug,需要紧急发布修复版本
- 7. 分支间操作注意事项
- 四、git常用命令
- 拉取
- 增删文件
- 提交
- 暂存代码
- 撤销
- 分支
- 修改查询与提交日志
一、Git工作流
- 工作区(Workspace)是电脑中实际的目录。
- 暂存区(Index)类似于缓存区域,临时保存你的改动。
- 仓库区(Repository),分为本地仓库和远程仓库。
通常提交代码分为几步:
- git add从工作区提交到暂存区
- git commit从暂存区提交到本地仓库
- git push从本地仓库提交到远程仓库
二、分支管理
三、Git命令操作规范
1. 切到develop分支,更新develop最新代码
git checkout develop
git pull --rebase
rebase没有产生新的节点,使用rebase的git演进路线(提交树)是一直向前的,这样在版本回退时也很容易;用merge的git路线是跳跃的,可以明确的知道是从哪个分支或节点修改的。
当合并代码有冲突时,需要手动修改冲突内容后,add,commit, push. 而rebase 操作的话,会中断rebase,同时会提示去解决冲突。解决冲突后, 再执行 git rebase –continue 继续操作,再push。
2. 新建feature分支,开发新功能
git checkout -b feature/xxx
...
git add <files>
# commit提交时,不能使用 -m 参数,这里只做示例
git commit -m "feat(xxx): commit a"
git commit -m "feat(xxx): commit b"
# 其他提交
...# 如果此时 develop 分支有一笔提交,影响到你的 feature 开发,可以 rebase develop 分支,前提是 该 feature 分支只有你自己一个在开发,如果多人都在该分支,需要进行协调# 切换到 develop 分支并更新 develop 分支代码
git checkout develop
git pull --rebase# 切回 feature 分支
git checkout feature/xxx
git rebase develop# 如果需要提交到远端,且之前已经提交到远端,此时需要强推(强推需慎重!)
git push --force
3. 完成feature分支,合并到develop分支
# 切到 develop 分支,更新下代码
git checkout develop
git pull --rebase# 合并 feature 分支 不快进合并
git merge feature/xxx --no-ff # 删除 feature 分支
git branch -d feature/xxx# 推到远端
git push origin develop
4. 当某个版本所有的 feature 分支均合并到 develop 分支,就可以切出 release 分支,准备发布新版本,提交测试并进行 bug fix
# 当前在 develop 分支
git checkout -b release/xxx# 在 release/xxx 分支进行 bug fix
git commit -m "fix(xxx): xxxxx"
...
5. 所有 bug 修复完成,准备发布新版本
# master 分支合并 release 分支并添加 tag
git checkout master
git merge --no-ff release/xxx
# 添加版本标记,这里可以使用版本发布日期或者具体的版本号
git tag 1.0.0# develop 分支合并 release 分支
git checkout develop
git merge --no-ff release/xxx# 删除 release 分支
git branch -d release/xxx
6. 线上出现 bug,需要紧急发布修复版本
# 当前在 master 分支
git checkout master# 切出 hotfix 分支
git checkout -b hotfix/xxx... 进行 bug fix 提交# master 分支合并 hotfix 分支并添加 tag(紧急版本)
git checkout master
git merge --no-ff hotfix/xxx
# 添加版本标记,这里可以使用版本发布日期或者具体的版本号
git tag 1.0.1# develop 分支合并 hotfix 分支(如果此时存在 release 分支的话,应当合并到 release 分支)
git checkout develop
git merge --no-ff hotfix/xxx# 删除 hotfix 分支
git branch -d hotfix/xxx
7. 分支间操作注意事项
- 同一分支
git pull
使用rebase
- 分支合并使用
--no-ff
四、git常用命令
拉取
# 下载远程仓库的所有变动
$ git fetch [remote]
# 显示所有远程仓库
$ git remote -v
# 显示某个远程仓库的信息
$ git remote show [remote]
# 增加一个新的远程仓库,并命名
$ git remote add [remote-name] [url]
# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
# 取回远程仓库的变化,并与本地分支变基合并
$ git pull --rebase [remote] [branch]
增删文件
#添加当前目录的所有文件到暂存区
$ git add .
#添加指定文件到暂存区
$ git add <file1> <file2> ...
#添加指定目录到暂存区,包括其子目录
$ git add <dir>
#删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
#停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]
#改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
提交
# 提交暂存区到仓库区
$ git commit -m [message]
# 提交工作区与暂存区的变化直接到仓库区
$ git commit -a
# 提交时显示所有 diff 信息
$ git commit -v
# 提交暂存区修改到仓库区,合并到上次修改,并修改上次的提交信息
$ git commit --amend -m [message]
# 上传本地指定分支到远程仓库
$ git push [remote] [remote-branch]
暂存代码
暂存就是把你当前的所有修改(不包括新增文件)保存到你本地仓库的一个临时暂存区。保存后则可以执行git pull拉取远程代码到本地,再把暂存区的修改释放出来。这样我们就可以保证在提交到本地之前就可以把这些远程和本地的提交都处理干净。
# 将未提交的变化放在储藏区
$ git stash
# 将储藏区的内容恢复到当前工作区
$ git stash pop
常用git stash命令:
# 执行存储时,添加备注
git stash save "save message"
#查看stash了哪些存储
git stash list
#显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num}
git stash show
#应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储
git stash apply
git stash apply stash@{$num}
#恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下
git stash pop
git stash pop stash@{$num}
#丢弃stash@{$num}存储,从列表中删除这个存储
git stash drop stash@{$num}
#删除所有缓存的stash
git stash clear
撤销
# 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 恢复暂存区当前目录的所有文件到工作区
$ git checkout .
# 恢复工作区到指定 commit
$ git checkout [commit]
# 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变
$ git reset [file]
# 重置暂存区与工作区,与上一次 commit 保持一致
$ git reset --hard
# 重置当前分支的指针为指定 commit,同时重置暂存区,但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定 commit,同时重置暂存区和工作区,与指定 commit 一致
$ git reset --hard [commit]
# 新建一个 commit,用于撤销指定 commit
$ git revert [commit]
分支
#列出所有本地分支
$ git branch
#列出所有本地分支和远程分支
$ git branch -a
#新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
#新建一个分支,并切换到该分支
$ git checkout -b [new_branch] [remote-branch]
切换到指定分支,并更新工作区
$ git switch [branch-name]
#合并指定分支到当前分支
$ git merge [branch]
#选择一个 commit,合并进当前分支
$ git cherry-pick [commit]
#删除本地分支,-D 参数强制删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin -D 分支名
修改查询与提交日志
# 查看工作区文件修改状态
$ git status
# 查看工作区文件修改具体内容
$ git diff [file]
# 查看暂存区文件修改内容
$ git diff --cached [file]
# 查看版本库修改记录
$ git log
# 查看某人提交记录
$ git log --author=someone
# 查看某个文件的历史具体修改内容
$ git log -p [file]
# 查看某次提交具体修改内容
$ git show [commit]