此文档将会持续更新...
版本回退相关指令操作
使用场景:代码异常回退指定版本或放弃当前版本代码
git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard 版本号 退到/进到,指定commit的哈希码(这次提交之前或之后的提交都会回滚)
回滚后提交可能会失败,必须强制提交
强推到远程:(可能需要解决对应分支的保护状态)
git push origin HEAD -f
合并多条已push记录
使用场景:代码开发完成提交测试,测试过程多次调整后上线会产生多条提交记录
#查看提交日志
git log
#xxxxx代表要修改的记录之前的位置对应的id,尽量往下面显示的选(往下面的越早提交)
git rebase -i 版本号
#将要去掉的那条记录把pick换成f
pick-->f
#wq保存之后再查看一次提交记录,应该已经不见了
git log
#修改最近一次提交
git commit --amend
#要将修改强制提交到服务器同步,例如dev分支
git push origin dev -f
#如果上面是master可能会报错,因为默认master是受保护的,需要去gitlab里面先去取消受保护的分支
单文件撤销操作
使用场景:服务器拉取代码单文件冲突回滚
git checkout 文件名
本地生成公钥
使用场景:用于配置git权限
1、先检测好本地是否配置好用户信息
git config user.name //检查用户名
git config user.email //检查邮箱
若尚未配置使用下面指令进行配置
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
2、执行创建公钥指令
ssh-keygen -t rsa -C "你的邮箱"
3、查找创建路径
C:\Users\Administrator\.ssh\id_rsa.pub
提交文件指令集合
使用场景:用于日常开发
1、获取最新数据
git fetch (可以追加指定分支默认刷新所有)
2、确认当前分支是否是要操作分支
git branch
若不是需要操作分支切换到指定分支
git checkout "分支名称"
3、查看当前状态
git status
如有需要添加到版本的新增文件使用指令 git add "文件"
4、提交文件
git commit -m "备注"
5、推送到远程分支
git push
修改文件暂存与恢复
使用场景:修改或添加的文件还没开发完成不想提交需要切换到bug分支修复bug时
1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
(2)git stash list :查看stash了哪些存储
(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
(7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
(8)git stash clear :删除所有缓存的stash
添加忽略文件
使用场景:不需要调整或和其他环境不同的代码以及不需要同步的代码进行忽略
在.gitignore添加完忽略文件需要清下缓存
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
注意 git rm -r --cached . 会清空暂存,如果有未提交的代码,先贮存或者提交
git clean 用作删除所有 untracked 文件。
git clean -n:查看所有将要删除的文件
git clean -f:删除当前目录下 untracked 文件,除过 .gitignore 里的文件或文件夹
git clean -f <path>:指定路径下
git clean -df:删除当前目录下 untracked 文件和文件夹
git clean -xf:删除当前目录下所有 untracked 文件,不管 .gitignore
注意 -xf 、-xdf 尽量少用
git钩子自动拉取配置
配置位置如下截图:
url:回调地址
secret token 请求头携带HTTP_X_GITLAB_TOKEN
Trigger 触发事件
<?php
if (!isset($_SERVER['HTTP_X_GITLAB_TOKEN']) || !isset($_SERVER['REMOTE_ADDR'])) {
exit('403');
}
//检测token
$token = '********';
if ($_SERVER['HTTP_X_GITLAB_TOKEN'] != $token) {
exit('token is invaild');
}
$whiteIp = ['127.0.0.1','**ip**'];
//检测ip
$ip = $_SERVER['REMOTE_ADDR'];
if (!in_array($ip, $whiteIp)) {
exit('ip is invaild');
}
//拉取配置分支
$config = [
'**分支名称**' => '**站点路径**',
];
//获取参数
$post = (array)json_decode(file_get_contents('php://input'), true);
$eventName = !empty($post['event_name']) ? $post['event_name'] : '';
$currentRef = '';//当前操作分支
switch (strtolower($eventName)) {
case 'push' :
$ref = !empty($post['ref']) ? $post['ref'] : '';
$currentRef = str_replace('refs/heads/', '', $ref);
break;
case 'merge_request' :
$currentRef = !empty($post['object_attributes']['target_branch']) ? $post['object_attributes']['target_branch'] : '';
break;
}
if (empty($currentRef)) {
exit('no found ref');
}
//检测是否在配置项中
if (empty($config[$currentRef])) {
exit('not found ref config');
}
$path = $config[$currentRef];
//执行
echo ((shell_exec("cd $path && git fetch origin $currentRef && git checkout -b $currentRef && git pull origin $currentRef 2>&1 ")));
FQA:
执行:git pull 提示:Please specify which branch you want to merge with.
解决:git branch --set-upstream-to=origin/分支 分支
问题:没有指定拉取分支
gitlab常用指令
启动服务:gitlab-ctl start
查看状态:gitlab-ctl status
停掉服务:gitlab-ctl stop
重启服务:gitlab-ctl restart
让配置生效:gitlab-ctl reconfigure
查看日志:gitlab-ctl tail