0

如何在本地机器上拥有一个工作目录并将 chanegs 分别推送到两个不同的远程?

我在我的服务器上设置了两个 git 存储库,dev并且main. 每当我在我的机器上进行更改时,我都想将更改推送到devmain

仅供参考,我正在使用 git 来部署我的代码。(我按照说明进行了设置。)我有一个网站,我想先将更改推送到dev我的客户可以查看的地方。如果更改看起来不错,那么我想将更改推送到main将部署更改的位置。

这是我到目前为止所做的。

  1. cd 到我本地机器上的项目目录。
  2. git init
  3. git remote add dev me@myserver.com:/var/git/dev.git
  4. git remote add main me@myserver.com:/var/git/main.git

但是,当我进行更改并尝试推送到任一 repo ( git push dev master) 时,我收到以下错误。

To me@myserver.com:/var/git/dev.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'me@myserver.com:/var/git/dev.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

当我这样做时git pull,我得到

fatal: No remote repository specified.  Please, specify either a URL or a
remote name from which new revisions should be fetched.

我想我不了解 git 的一些基础知识。有人可以帮助我吗?

4

2 回答 2

1

Apull是 afetch后跟一个合并。当您执行时,fetch您需要指定要获取的遥控器,因此请尝试

git pull dev

或者

git pull main

请注意,维持对不同存储库的推送是很棘手的。更好的方法是为每个分支(使用默认远程)设置一个分支并在本地处理合并。

git checkout -b main main/master git checkout -b dev dev/master

你的工作周期看起来有点像:

<do some work on master>
git checkout -b dev
git pull
git merge master (Or the specific commits you want).
git push
<get client to approve, assuming he does>
git checkout -b main
git pull
git merge dev
git push
<go back to master>
git checkout -b master

查看 git 手册中的cherry-picking 以了解如何处理合并特定提交。

于 2013-09-04T12:26:05.407 回答
0

您几乎需要按照错误所说的做:指定远程存储库

git pull dev

这将fetchmerge最新的变化从dev. 一旦你解决了任何合并冲突,你就可以push干净地:

git push dev master
于 2013-09-04T12:25:33.600 回答