Git版本控制与协作
Git 协作流程
- workspace:工作区(代码区)
- staging area:暂存区/缓存区。
- local repository:本地仓库,也就是
.git目录
,所有关于此项目的数据都存放在这里。 - remote repository:远程仓库,也就是
http://xxxx.com/app/api.git
,通常使用origin
作为别名标识远程仓库。
master 分支(正式服)
master
永远处于稳定状态,这个分支代码可以随时用来部署。不允许
在该分支直接提交代码,只能通过develop分支
合并过来。该分支一般设置成分支保护
状态,只允许管理员操作。
develop 分支(测试服)
开发分支,包含了项目最新的功能和代码,同样不允许
直接提交到该分支中,只能通过feature/xxx
分支合并过来。一般develop分支需要部署到测试服务器中,给产品和测试人员测试新功能。同样一般设置成分支保护
状态,由代码审核人员操作。
注意:因为多个人可能同时合并到develop,可能会出现代码冲突
。在合并前,先要拉取最新的develop分支
的代码后,在将develop合并到feature/xxx分支,然后再将feature/xxx分支push推送到线上该分支中,并在远程申请合并到develop分支。管理员审核代码无问题后,同意合并[见下图]。
feature 分支(功能开发分支)
新功能开发,或者bug修改,请从develop
分支开出一个feature
分支,分支名约定为feature/xxx
,开发完成后合并回develop
分支并且删除这个feature
分支,相应的操作如下:
# 将 工作空间 切换到开发分支 develop
git checkout develop
# 拉取origin的develop分支到 工作空间
git pull origin develop
# 从develop上切出一条自己的feature/xxx分支
git checkout -b feature/xxx
# 写代码,提交,写代码,提交。。。
git add .
git commit -a -m "功能修改备注1"
git checkout develop # 切换到develop分支
git pull origin develop # 拉取最新代码
git checkout feature/xxx # 切换到feature/xxx分支
git merge develop # 将develop合并到feature/xxx分支,并解决冲突
git push origin feature/xxx # 将feature/xxx分支推送到线上的对应分支
# 在网页中申请合并到develop分支,为什么会在线上申请呢?因为网页上很方便审核代码,鼠标点点点就可以看到修改的代码了。
# 分支合并完后,删除该分支
$ git branch -d feature/xxx
Git常用命令
创建仓库命令
# 初始化仓库,也就是创建.git目录
git init
# 拷贝一份远程仓库,也就是下载一个项目。
git clone <url> [文件夹]
提交与修改
# 添加文件到暂存区
git add [dir/file]
# 提交暂存区到本地仓库
git commit -m [message]
git commit [file1] [file2] ... -m [message]
git commit -a # 可以不执行add直接提交
# 查看仓库当前的状态,显示有变更的文件
git status
# 比较文件的不同,即暂存区和工作区的差异
git diff [file]
# 显示出branch1和branch2中差异的部分
git diff branch1 branch2 --stat
git diff branch1 branch2 # 详情
# 回退版本
git reset --mixed [版本] 默认模式,影响区域为,HEAD(commit):是,缓存区(add):是,工作区(代码):否
git reset --soft [版本] 影响区域为,HEAD:是,缓存区:否,工作区:否
git reset --hard [版本] 影响区域为,HEAD:是,缓存区:是,工作区:是
git reset --hard origin/master # 将本地的状态回退到和远程的一样
git reset –-hard HEAD~3 # 回退上上上一个版本
git reset 052e # 回退到指定版本
git reset HEAD~1 hello.php # 回退 hello.php 文件的版本到上一个版本
远程操作
# 远程仓库操作
git remote
git remote add [别名] [url]
# 从远程获取代码库
git fetch
git fetch [alias] # 获取远程所有的分支
git merge [alias]/[branch] # 获取远程某个分支
# 下载远程代码并合并
git pull
git pull origin master
git pull origin master:brantest # 将远程origin的master分支拉取过来,与本地的brantest分支合并
# 上传远程代码并合并
git push
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master
分支管理
# 创建分支
git branch (branchname)
# 切换分支
git checkout (branchname)
# 列出分支
git branch
# 删除分支
git branch -d (branchname)
# 分支合并
git merge (branchname)
其他命令
# 查看历史提交记录
git log
# 配置与记住账号密码
git config --global credential.helper store
# 中文文件名或者路径被转义成\xx\xx\xx之类的解决方法
# 要注意的是,这样设置后,你的git bash终端也要设置成中文和utf-8编码。才能正确显示中文
git config --global core.quotepath false
Git私有项目 access denied
出现这个错误说明系统凭据中已经保存了此域的账号,在
控制面板=>用户账户=>凭据管理器=>windows凭据
中删除该域后,重新执行git push会弹出输入账号密码框
Git项目实战流程图
其他业务场景
将远程仓库的master分支的代码拉取到已经存在文件的文件夹中
业务描述:线上服务器未使用git,现在需求要使线上服务器直接使用git更新现有代码。
# 步骤如下:
# 使用对比工具等,手动同步git的master到线上服务器。
# 登录到线上服务器,安装git软件,这里就略过。
cd /data/wwwdata/testweb
git init # 初始化仓库
git remote add origin https://github.com/xxx/xxxx.git # 添加远程仓库
git fetch origin master # 获取远程仓库的master分支,这你只拉取了指定分支
# 如果以下命令不加--allow-unrelated-histories参数,会提示失败
# refusing to merge unrelated histories
# 两个分支是两个不同的版本,具有不同的提交历史
# git pull origin master --allow-unrelated-histories
git reset --hard origin/master # 将本地的状态回退到和远程的一样
# 解决冲突,一般这里没冲突,因为第一步已经将代码手动同步了
git代理
在使用github时实际操作时挂V代理后git依然无法走代理
经常出现超时
,这点一定要注意。如果要使用代理,需使用如下方法实现:
# 临时代理(注意 git -c 要在 clone/pull 前面)
git -c http.proxy="http://127.0.0.1:10809" clone https://github.com/xxx/yyy.git
git -c http.proxy="http://127.0.0.1:10809" pull
# 全局代理
# git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
# git config --global https.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
# git config --global 协议.proxy 协议://ip地址:端口号
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
git config --global http.proxy 'socks5://127.0.0.1:7891'
git config --global https.proxy 'socks5://127.0.0.1:7891'
# 取消全局代理
git config --global --unset http.proxy
git config --global --unset https.proxy
# 设置仅针对某个网站的代理:比如GitHub
#只对github.com
git config --global http.https://github.com.proxy http://127.0.0.1:7890
git config --global http.https://github.com.proxy socks5://127.0.0.1:7891
#取消代理
git config --global --unset http.https://github.com.proxy
最后更新于 2024-11-05 14:26:35 并被添加「git」标签,已有 716 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭