5

私はgithubにリポジトリを持っています.testrepoと言います。ここで、リポジトリから編集できるようにするrepoブランチが 1 つあるローカル リポジトリをセットアップしたいと思います。origin-master

repo/origin-master  <-------->  origin/master

クローニングはうまくいきます:

mkdir repo && cd repo && git init 
# not necessary of course:
echo "master" > master && git add master && git ci -m "master"
git remote add origin git@github.com:<username>/testrepo.git
git fetch origin
git branch --set-upstream origin-master origin/master 
git checkout origin-master
# create a new file:
echo "for origin-master" > orig-master && git add orig-master && git ci -m "orig-master"

しかし

git push origin 
To git@github.com:<username>/testrepo.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:<username>/testrepo.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.

origin-masterOrigin にプッシュしたい場合は、ローカル ブランチをにプッシュしたいことを git に伝えるにはどうすればよいorigin/masterですか?

4

3 に答える 3

4

裸ではない (つまり、作業コピーを使用する) リポジトリにプッシュするための適切なアドバイスについては、この投稿を参照してください。基本的にここで何が起こっているかというと、この方法でプッシュすると、リモート リポジトリは作業コピー (実際のファイル) を更新せず、履歴のみを更新するということです。次にgit reset --hard、ファイルを更新する必要がありますが、コミットされていない変更が失われるため危険です。

一般的なアドバイスとして、複数の非ベア リポジトリを扱う場合は、プッシュよりプルを優先するように言います:ベア リポジトリのみにプッシュします

于 2012-05-18T08:16:50.300 に答える
3

セットアップしようとしているワークフローの種類を理解するのに苦労していますが、これは役に立ちますか?

既存の git ブランチがリモート ブランチを追跡するようにするにはどうすればよいですか?

于 2012-05-19T18:10:22.717 に答える
2

デフォルトのプッシュ動作をアップストリームに設定します。

$ git config push.default upstream
$ git push origin

git push origingit push origin :は、デフォルトですべての「一致する」ブランチをプッシュする と同じです。origin-master ブランチが一致しないため、一致するブランチ ( ) を取り、それをオリジンにプッシュしようとますmaster

pushまたは、リモートごとに refspec を指定することもできます。

$ git config --add remote.origin.push origin-master:master
$ git push origin

git-push の例git-configも参照してください。

于 2012-05-22T20:19:59.823 に答える