总结一些Gie经验

Git撤销对远程仓库的push&commit提交

撤销push

  1. 执行 git log查看日志,获取需要回退的版本号

img

  1. 执行 git reset –-soft <版本号> ,如 git reset –soft 4f5e9a90edeadcc45d85f43bd861a837fa7ce4c7 ,重置至指定版本的提交,达到撤销提交的目的

然后执行 git log 查看

img

此时,已重置至指定版本的提交,log中已经没有了需要撤销的提交

git reset 命令分为两种: git reset –-soft 与 git reset –-hard ,区别是:

   前者表示只是改变了HEAD的指向,本地代码不会变化,我们使用git status依然可以看到,同时也可以git commit提交。后者直接回改变本地源码,不仅仅指向变化了,代码也回到了那个版本时的代码。

  1. 执行 git push origin 分支名 –force ,强制提交当前版本号。

至此,撤销push提交完成。

撤销commit

  1. 执行 git log 查看需要撤销的commit的前面一个提交版本的id;
  2. 执行 git reset –hard commit_id ,该commit_id为需要撤销的commit的提交的前面一个提交的版本,即需要恢复到的提交的id,重置至指定版本的提交,达到撤销提交的目的
  3. 执行 git log 查看,commit提交已撤销

添加多个远程仓库

修改config文件

  1. 定位到.git/config

image-20240715102010000

[remote “origin”] 远程:

url:推送地址

fetch:拉取地址

  1. 添加remote里面的url,如gitee仓库

image-20240715102946107

  1. push同步提交
1
git push origin

image-20240715103429622 4. 至此,添加多个远程仓库完成。

查看分支和切换分支

查看分支

1
	git branch -a

image-20240719223802363

切换分支

1
git checkout branchName

image-20240719230135038

git拉取、推送所有分支及标签

从origin1推送到origin2

1
2
3
4
5
6
7
git push origin2 'refs/remotes/origin1/*:refs/heads/*' 

# 推送后带有后缀demo01 
git push origin2'refs/remotes/origin1/*:refs/heads/demo01/*' 

# 推送指定分支 
git push origin2 'refs/remotes/origin1/dev:refs/heads/dev'

拉取所有分支到本地

1
2
3
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

image-20240719225022333

拉取所有标签到本地

1
git fetch origin --prune

切换远程仓库 推送所有分支

1
git push --mirror

推送所有标签

1
git push origin --tags

git迁移脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash

export oldUrl=$1
export newUrl=$2
export repoName=$3

printf "oldUrl: %s\nnewUrl: %s\nrepoName: %s\n" $oldUrl $newUrl $repoName

[[ -z "${oldUrl}" ]] && echo "不能为空" && exit
[[ -z "${newUrl}" ]] && echo "不能为空" && exit
[[ -z "${repoName}" ]] && echo "不能为空" && exit

printf "克隆原仓库"
cd repo || exit
git.exe clone --progress -v "${oldUrl}"
cd ${repoName} || exit
#git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
#git fetch --all
#git pull --all
#git fetch origin --prune


# 原仓库
# dev -> dev-origin

# git remote change new repo
echo "增加新仓库"
git remote rename origin origin-old
git remote add origin "${newUrl}"

echo "拉取所有仓库分支"
git fetch origin
git fetch origin-old

echo "删除本地dev分支"
git branch -D dev





# origin/dev -> origin/dev-bak
echo "备份分支"
git checkout -b dev-origin origin-old/dev
git checkout -b dev-yanshi4-11 origin-old/yanshi4-11
git checkout -b dev-bak origin/dev

echo "新仓库切出dev分支"
git checkout -b dev origin/dev

echo "复制ci配置到临时文件"
mkdir -p ../tmp/ || exit
cp .gitlab-ci.yml Dockerfile ../tmp/ || exit

echo "切回旧仓库dev分支"
git checkout master
git branch -D dev
git checkout -b dev origin-old/yanshi4-11

echo "配置ci配置"
mv -f ../tmp/* ./ || exit
mv -f ../tmp/.gitlab-ci.yml ./  || exit
git add .
git commit -m "ci适配"

echo "删除旧仓库远程配置,防止误删"
git remote remove origin-old


echo "推送所有分支"
git push --progress "origin" dev-origin
git push --progress "origin" dev-yanshi4-11
git push --progress "origin" dev-bak
git push --force --progress "origin" dev:dev
文章有帮到您的话,请我喝杯奶茶吧ヾ(●´∀`●)
莫德飞 支付宝支付宝
莫德飞 微信微信
0%