3

私はすでにグーグルで検索し、多くのドキュメントを読みました。しかし、残念ながら私はそれらすべてを理解することはできません

私の状況です。

git branch -r
origin/HEAD -> origin/master
origin/master
origin/team/myteam

git branch -a
master
team/myteam
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/team/myteam

そして今、すべてのパッチを master から remote にマージするのが好きmybranchです。

私は試した

git チェックアウト チーム/myteam

git リベース マスター

git status
On branch team/myteam 
Your branch and 'origin/team/myteam' have diverged,
and have 238 and 18 diffrent commits each, respectively.
nothing to commit, working directory clean

動作しているようですが、エラーがpush返されます..

私はゲリットを使っています。

git push origin HEAD:refs/for/team/mybranch  
...
..
remote: Resolving
deltas: 100% (14481/14481) remote: Processing changes: refs: 1, done
To ssh://156.xxx.xxx.xxx/xxx  ! [remote rejected] HEAD -> refs/for/team/myteam (change 228 closed) 
error: failed to push some refs to 'ssh://156.xxx.xxx.xxx/xxx
4

3 に答える 3

3

あなたの問題はワークフローの問題です。

リモートにプッシュする前に team/myteam ブランチの下で master を歴史的にリベースしていないため、これはforce push. 以前にリベースされていないため、ブランチが分岐しました。現在の状態では、リベースされたマージをリモートにプッシュすることは、強制的にプッシュしないと不可能です。非常に一般的に言えforce pushば、他の誰もリモート ブランチを使用していない場合を除き、良い選択ではありません。

ローカル ブランチとリモート ブランチの分岐の問題を解決する方法は多数あります。

  • git mergeローカルで実行しgit pushて、リモート ブランチを最新の状態にすることができます。これはおそらく最も単純です。
  • 既存のリモート ブランチを廃止し、チームの新しいリモート ブランチにプッシュしてから、チーム メンバーと調整して新しいリモート ブランチの使用を開始できます。
  • force pushリモートの myteam ブランチに移動し、チーム メンバーと調整して、強制プッシュをローカル リポジトリとマージすることができます。これは苦痛かもしれません。

myteam (ブランチ名) で git マージを行うには、クリーン マージを行うためにローカル ブランチを削除する必要がある場合があります。git branch -D branchnameローカルブランチを削除することです。それで...

git checkout branchname
git pull -r origin branchname
git merge master
git push origin branchname

将来的には、リモートへのすべてのプッシュの前に、マスターを使用してローカル ブランチをリベースする必要があります。以下に記述するコマンドよりも簡単にリベースを実行する方法がありますが、デモ用にこれを冗長にしています。

git checkout mybranch
git fetch
git rebase origin/master
git push origin HEAD:refs/for/team/mybranch

PS。申し訳ありませんが、Gerrit を知りません。

PPS。git では、リモート ブランチとローカル ブランチからリモートへforce pushの 2 つの操作の組み合わせです。deletepush

于 2013-05-06T20:58:07.460 に答える
-1

1) gerrit を使用していて、変更が閉じられているため、同じ ChangeID をプッシュすることはできません。

2) ワークフローが正しくない git fetch origin を実行してから、git rebase origin master & Commit and push を実行する必要があります

于 2013-05-06T10:58:04.520 に答える