撤销push
- 执行 git log查看日志,获取需要回退的版本号

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

此时,已重置至指定版本的提交,log中已经没有了需要撤销的提交
git reset 命令分为两种: git reset –-soft 与 git reset –-hard ,区别是:
前者表示只是改变了HEAD的指向,本地代码不会变化,我们使用git status依然可以看到,同时也可以git commit提交。后者直接回改变本地源码,不仅仅指向变化了,代码也回到了那个版本时的代码。
- 执行 git push origin 分支名 –force ,强制提交当前版本号。
至此,撤销push提交完成。
撤销commit
- 执行 git log 查看需要撤销的commit的前面一个提交版本的id;
- 执行 git reset –hard commit_id ,该commit_id为需要撤销的commit的提交的前面一个提交的版本,即需要恢复到的提交的id,重置至指定版本的提交,达到撤销提交的目的
- 执行 git log 查看,commit提交已撤销
添加多个远程仓库
修改config文件
- 定位到.git/config

[remote “origin”] 远程:
url:推送地址
fetch:拉取地址
- 添加remote里面的url,如gitee仓库

- push同步提交
4. 至此,添加多个远程仓库完成。
查看分支和切换分支
查看分支

切换分支
1
|
git checkout branchName
|

从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
|

拉取所有标签到本地
1
|
git fetch origin --prune
|
切换远程仓库
推送所有分支
推送所有标签
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
|