Git提交到多个远程仓库

来源:http://stackoverflow.com/questions/5785549/able-to-push-to-all-git-remotes-with-the-one-command

有两种做法,先看第一种


一、通过命令行进行操作

例如我有下面两个仓库:

Mybatis通用Mapper

https://git.oschina.net/free/Mapper.git

https://github.com/abel533/Mapper.git

在项目路径下打开Git Bash

添加一个remote,这里是all,也可以是别的名字

输入:git remote add all https://git.oschina.net/free/Mapper.git

再添加另一个:git remote set-url --add all https://github.com/abel533/Mapper.git

如果有多个,按照上面这一个命令进行添加.

提交的时候输入:git push all --all

这样就会一次提交到多个库了,上面命令输出如下:

$ git push all --all
Counting objects: 19, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (10/10), 644 bytes | 0 bytes/s, done.
Total 10 (delta 3), reused 0 (delta 0)
To https://github.com/abel533/Mapper.git
   5b83845..ebd3836  master -> master
Counting objects: 19, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (10/10), 644 bytes | 0 bytes/s, done.
Total 10 (delta 3), reused 0 (delta 0)
To https://git.oschina.net/free/Mapper.git
   5b83845..ebd3836  master -> master

在操作完上面的添加命令后,如果我们打开.git/config文件,我们可以看到这样的配置:

[remote "all"]
	url = https://github.com/abel533/Mapper.git
	fetch = +refs/heads/*:refs/remotes/all/*
	url = https://git.oschina.net/free/Mapper.git

从这个配置可以引出我们的第二种方法.


二、直接配置.git/config文件

在配置中添加:

[remote "all"]
	url = https://github.com/abel533/Mapper.git
	url = https://git.oschina.net/free/Mapper.git

有多少个远程库,就配置多少个url即可.

从这里可以看出,第一种方法生成的配置中还有一个fetch配置,这个配置可以完全去掉.

<think>我们正在讨论如何撤回已经推送到远程仓库Git提交。根据引用内容,有几种方法可以实现:1.使用`gitrevert`创建反向提交(安全,不改变历史)2.使用`gitreset`回退本地提交,然后强制推送(改变历史,需谨慎)3.使用`gitreflog`找到提交记录进行操作用户问题:我想撤回已提交远程仓库Git提交步骤:方法一:使用gitrevert(推荐,不会改变历史)1.找到要撤销的提交的哈希值(使用`gitlog`)2.执行`gitrevert<commit-hash>`,这会创建一个新的提交来撤销之前的更改3.将新提交推送到远程:`gitpushorigin<branch-name>`方法二:使用gitreset(会改变历史,适用于未与他人共享的情况)1.回退到指定提交:`gitreset--hard<commit-hash>`(例如:回退到上一个提交`HEAD~1`)2.强制推送到远程:`gitpushorigin<branch-name>--force`注意:强制推送可能会覆盖其他人的工作,只有在确定没有其他人基于该提交工作时才使用。方法三:使用gitreflog(用于找回误操作前的状态)如果误操作了reset,可以使用`gitreflog`查看操作历史,然后使用`gitreset--hard<commit-hash>`恢复到某个状态。根据引用[1][2][4]的内容,强制推送需要谨慎,因为会覆盖远程仓库。而revert是更安全的方式,因为它不会改变历史,只是增加一个新的提交。因此,推荐用户使用`gitrevert`,除非明确需要修改历史。相关问题:1.如何撤销`gitrevert`操作?2.强制推送后如何恢复丢失的提交?3.如何避免在Git中需要强制推送的情况?</think>### 如何撤回已推送到远程仓库Git 提交 撤回已推送的提交主要有两种安全方法,根据是否允许修改历史记录选择: #### ✅ 方法一:创建反向提交(推荐,不修改历史) ```bash # 1. 查看提交记录获取哈希值 git log --oneline # 2. 创建反向提交(撤销指定提交的修改) git revert <commit-hash> # 例:git revert a1b2c3d # 3. 推送撤销提交远程 git push origin <branch-name> ``` **特点**: - 新增提交记录,不会修改历史 - 安全适用于协作项目[^2] - 撤销记录清晰可追溯 #### ⚠️ 方法二:重置本地提交(会修改历史) ```bash # 1. 重置到目标提交(HEAD~1表示前一次提交git reset --hard <commit-hash> # 或 git reset --hard HEAD~1 # 2. 强制推送到远程(覆盖历史) git push origin <branch-name> --force ``` **注意**: - 会永久删除提交记录 - 强制推送前需解除分支保护[^5] - 仅限私有分支使用,否则会破坏他人工作[^1][^4] #### 🔧 补救措施 如果误操作,可通过 reflog 恢复: ```bash git reflog # 查看操作历史 git reset --hard <丢失的提交哈希> # 恢复提交[^1] ``` > **最佳实践**:协作项目始终用 `git revert`,私有分支才用 `git reset --force`。撤回后建议通知团队成员同步变更[^2]。 --- ### 相关问题 1. 如何撤销 `git revert` 操作? 2. 强制推送导致代码丢失如何恢复? 3. Git 分支保护机制如何配置? 4. `git reset --soft` 和 `git reset --hard` 有何区别? 5. 如何批量撤回多个已推送的提交? [^1]: 强制推送更改:将重置后的本地分支强制推送到远程仓库。注意,强制推送可能会覆盖远程仓库中的其他更改,因此需要谨慎使用。 [^2]: 通过这种方式,你可以安全地撤回已经推送到远程仓库提交,而不会影响到项目的历史记录。如果操作得当,并且确实没有其他人在你之后提交,那么其他人不需要进行任何额外的提交。 [^4]: 如果你想要完全删除最新的提交(谨慎操作,因为这会改变历史)。 [^5]: 如果推送被拒绝,则需要在远程仓库取消该主分支的保护。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isea533

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值