如何恢复Git远程仓库上次推送的数据?如何获取推送信息制作Ubuntu MR别名?
嘿,我来帮你搞定这两个Git相关的问题!
1. 恢复上次推送到远程仓库的数据
首先得明确场景:如果远程仓库还没被其他人提交修改,那恢复起来很简单;如果已经有其他人的提交,强制覆盖会丢数据,这时候得先和团队协调。
第一步:找到上次推送的提交哈希
Git会记录所有本地操作的日志,用git reflog就能看到。你会看到类似这样的条目:abc1234 HEAD@{2}: push: refs/heads/main to origin/main这里的
abc1234就是你上次推送的提交哈希,记下来。第二步:恢复远程分支(如果远程已经被错误覆盖)
注意:这个操作会强制覆盖远程分支的内容,只有在确认远程分支没有其他人的新提交时才能用,否则会丢失别人的工作!
执行强制推送,把之前的提交推回远程:git push -f origin abc1234:<你的远程分支名>比如你的远程分支是
main,就写git push -f origin abc1234:main。如果本地的提交也丢了:
先用reflog恢复本地分支:git checkout -b recover-branch abc1234之后再把这个分支推到远程(如果需要的话)。
2. 找回推送完成后的信息,以及创建Ubuntu别名打开MR
找回推送相关信息
推送后的输出内容(比如推送的分支、提交哈希、远程地址)其实可以通过Git的日志和命令找回:
- 用
git reflog找最近的推送记录,里面会明确标注哪个提交被推送到了哪个远程分支,和前面恢复数据时用的方法一样。 - 查看上次推送的提交详情:
git show --stat <提交哈希>,能看到提交的改动和基本信息。 - 查看当前分支的远程跟踪信息:
git rev-parse --abbrev-ref @{u},会返回类似origin/main的结果,告诉你当前分支关联的远程分支。 - 如果想查看Git的推送历史日志,还可以用
git log --grep="push",过滤出包含push关键词的日志条目。
创建Ubuntu别名一键打开MR
假设你用的是GitLab(如果是GitHub,只需修改URL格式),可以在~/.bashrc或~/.zshrc里添加下面的别名脚本:
alias open-mr=' # 获取当前工作分支名 CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) # 获取远程仓库的URL REMOTE_URL=$(git config --get remote.origin.url) # 从SSH格式的URL里提取项目路径(比如 git@gitlab.com:user/repo.git → user/repo) PROJECT_PATH=$(echo $REMOTE_URL | sed -E "s/git@gitlab\.com:(.*)\.git/\1/") # 生成GitLab的MR链接,默认目标分支是main,你可以改成自己常用的分支(比如dev) MR_URL="https://gitlab.com/$PROJECT_PATH/merge_requests/new?merge_request[source_branch]=$CURRENT_BRANCH&merge_request[target_branch]=main" # 用Ubuntu默认工具打开URL xdg-open $MR_URL '
如果是GitHub,把PROJECT_PATH的处理和MR_URL改成下面的:
PROJECT_PATH=$(echo $REMOTE_URL | sed -E "s/git@github\.com:(.*)\.git/\1/") MR_URL="https://github.com/$PROJECT_PATH/compare/main...$CURRENT_BRANCH"
添加完别名后,执行source ~/.bashrc(或者source ~/.zshrc)让别名生效,之后在Git仓库目录里输入open-mr就能一键打开当前分支的MR页面了!
内容的提问来源于stack exchange,提问作者LukeD
相关产品推荐
相关产品推荐

