Git操作规范
一、 从现有仓库拉取项目
第一种情况,只有主分支的仓库
-
第1步,本地新建文件夹,并初始化git
git init
-
第2步,克隆指定仓库项目到新建文件夹
git clone [url]
第二种情况,多分支项目仓库,项目中常见
如何从远程仓库分支拉取代码?
git init # 初始化本地仓库
git remote add origin [仓库地址] # 添加远程仓库地址映射
git fetch origin dev # 从远程仓库拉取分支
git branch -b dev origin/dev # 新建本地分支并于远程分支绑定
git pull origin dev # 从远程分支拉取代码
二、 本地新建项目推送到Git仓库
-
本地新建项目文件夹,初始化git
git init
-
添加本地仓库与远程仓库关联
git remote add origin [url]
-
创建.gitignore文件,配置忽略版本控制的文件夹或者文件
touch .gitignore
-
把新增内容加入版本控制
git add .gitignore
指定文件名git add .
添加所有文件,会自动忽略.gitignore过滤内容 -
在本地仓库提交并添加注释
git commit -m "编写注释"
如果要提交全部内容,可合并第4、5步操作,使用如下命令一次性操作:
git commit -a -m "编写注释"
-
推送至远程仓库
git push
-
如果有远程分支的情况下
7.1 创建并选取本地分支,commit以后进行操作即可
git checkout -b dev # git checkout命令加上-b参数表示创建并切换 git branch dev # 命令会列出所有分支,当前分支前面会标一个*号。 git push origin dev # 提交到分支
三、 项目开发中常用操作
提交(commit)
git commit -m "编写注释"
更新及冲突解决
-
建议使用rebase模式
git pull --rebase
git rebase --coutinue
git rebase --skip
该模式下,遇到需要解决冲突的文件,会罗列出来,然后我们手动去解决这些文件冲突或者忽略或者跳过。如果手动解决了冲突,需要把解决冲突的文件提交,然后使用
git rebase --coutinue
命令继续更新操作。
推送到远程仓库
git push
四、 分支管理
分支管理规范参考博客:https://www.cnblogs.com/spec-dog/p/11043371.html
[分支创建以及合并原理]https://www.cnblogs.com/billmiao/p/9872176.html
4.1 问题一
技术主管让你去某个git分支上新建一个分支去做你的项目,那么如何在原远程分支的基础上新建自己的分支呢?
分支常见命令
git branch # 查看分支
git branch <name> # 创建指定名称分支
git checkout <name> 或者 git switch <name> # 切换分支
git branch -b <name> 或者 git switch -c <name> # 创建并且切换到该分支
git merge <name> # 合并指定分支到当前分支
git branch -d <name> # 删除指定名称分支
解决方法
按照以下命令敲即可
- git branch newBranch //新建本地分支
- git checkout newBranch //本地切换到自己的分支
- git pull origin xxxxBranch //从远程目标分支copy代码
- git push origin newBranch //将本地新建的分支同步到服务器
- git branch --set-upstream-to=origin/newbranch newbranch //本地分支和远程分支建立追踪
到此为止,就完成了需求。
4.2 问题二
如何进行分支合并?
- 功能分支并入到主分支
$ git checkout master # 选择到主分支
Switched to branch 'master'
$ git merge feature # 指定功能分支 feature 合并到主分支
Fast-forward
- 主分支更新,功能分支开发中更新
# 不会看到合并信息
$ git rebase --onto master # 通过rebase获取主分支更新
$ git checkout master # 切换到主分支
Switched to branch 'master'
$ git merge feature # 合并feature到主分支
Fast-forward
# 可以看到历史合并信息 主要区别在于 --on--ff上 使用 git log 查看历史合并信息
$ git rebase --onto master
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff feature
Non fast-forward
- 功能分支开发完毕,并入生产分支,在开发完毕后并入主分支
$ git checkout -b dev # 切换到开发分支
Switched to a new branch 'dev'
$ git merge feature # 合并功能分支到开发分支
Fast-forward
$ git checkout master # 切换到主分支
Switched to branch 'master'
$ git merge dev # 合并开发分支到主分支
Fast-forward
- 保留脏代码
$ git rebase --onto 'base' from 'start' # 建立新的分支,将脏代码放在新的分支上,需要的时候将更新出来 通过form
解决方法
参考博客《如何规范的合并分支》https://www.cnblogs.com/zzzz76/p/9350547.html
4.3 bug分支的使用
$ git stash # 保存当前工作以后进行一下操作
# 1. 当前任务未结束,需要处理bug时
# 1.1 git status 查看是否有文件有问题或者冲突存在
# 1.2 需要确定bug所在分支
# 1.3 切换到问题分支,创建新的bug分支
$ git checkout master # 问题分支
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
(use "git push" to publish your local commits)
$ git checkout -b issue-101 # 从问题分支上创建新的bug分支
Switched to a new branch 'issue-101'
$ git add readme.txt #提交修改文件
$ git commit -m "fix bug 101"
[issue-101 4c805e2] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)
# 1.4 处理完成bug以后需要切回到问题分支
# 1.5 合并bug分支到问题分支
# 1.6 删除bug 分支
$ git switch master # 切换回问题分支
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
(use "git push" to publish your local commits)
$ git merge --no-ff -m "merged bug fix 101" issue-101 # 带log的方式 提交修复记录以及制定bug分支合并到问题分支
Merge made by the 'recursive' strategy.
readme.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
# 1.7 切换回工作分支
$ git switch dev
Switched to branch 'dev'
$ git status
On branch dev
nothing to commit, working tree clean
# 1.8 还原之前工作
$ git stash list # 查看临时分区
$git stash pop # 恢复同时删除临时区域(stash) == git stash apply + git stash drop
# 同时恢复其他分支上的bug
$ git branch
* dev
master
$ git cherry-pick 4c805e2 # 这个是4c805e2 提交修改文件以后git返回的
[master 1d4b803] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)
[原文地址]https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
五、 标签管理
# 1. 创建标签
# 1.1 简单创建标签
git tag [标签名称]
# 1.2 创建带说明的tag标签
git tag -a v0.1 -m "说明内容" commitid
# 2. 查看创建的所有标签
git tag
# 3. 对已提交的数据补打标签
$ git log --pretty=oneline --abbrev-commit # 查出所有需要commit 记录
$ git tag v0.9 f52c633 # 找到对应提交记录的 commitid 'f52c633'
# 注意,标签不是按时间顺序列出,而是按字母排序的。
# 4. 查看标签信息:
$ git show <tagName>
# 5. 删除标签
# 5.1 删除本地标签
$ git tag -d tagNme
# 5.2 删除远程标签 需要删除本地标签,再推送到远程仓库
$ git tag -d v0.9
# 6. 标签默认本地存储,推送到远程仓库
# 6.1 推送单个
$ git push origin tagName
# 6.2 推送全部
$ git push origin --tags
$ git push origin :refs/tags/tagName
六、撤销以及删除
-
撤销操作
git checkout -- [file]
没有 git commit 之前,但是已经添加到版本库
git reset HEAD [file]
回到第一步,再进行撤回
-
删除
2.1 删除并提交到版本库,将版本库中的文件同步删除
git rm file ; git commit -m "file"
2.2 误删,没有提交到版本库的
git checkout -- test.txt
// 命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
七、日志格式化命令
# 格式化日志,效果比较好
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"