6

ここにあるものを使用しようとしましたが、それでは問題が解決しません。

リモート リポジトリから複製された git のローカル リポジトリがありdevelopmentます。ローカルに分岐して、呼ばれる分岐の新機能をいじって、リモート リポジトリに新しい分岐をセットアップするためにnewBranchName呼び出します。git push origin newBranchName

プッシュしようとすると、git は私newBranchNameのローカル ブランチを、古いブランチが追跡していたすべてのブランチにもプッシュしているようです。それはやめてほしい。

これが私が意味することの拡張サンプルです。ローカル ブランチを作成し、ファイルを追加し、ローカルでコミットしてから、リモート サーバー上の新しいブランチにプッシュします。ここまでは順調ですね。

Administrator@BOXEN /path/to/working/dir (oldBranch)
$ git branch testingStuff

Administrator@BOXEN /path/to/working/dir (oldBranch)
$ git checkout testingStuff
Switched to branch 'testingStuff'

Administrator@BOXEN /path/to/working/dir (testingStuff)
$ vim test.txt

Administrator@BOXEN /path/to/working/dir (testingStuff)
$ git add test.txt

Administrator@BOXEN /path/to/working/dir (testingStuff)
$ git commit -a
[testingStuff 11468d8] Testing git; can trash this branch.
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 test.txt

Administrator@BOXEN /path/to/working/dir (testingStuff)
$ git push origin testingStuff
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 299 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To http://url/to/remote/repo.git
 * [new branch]      testingStuff -> testingStuff

次に、その test.txt ファイルを編集し、変更をコミットしてプッシュします。これが私を混乱させるものです。

Administrator@BOXEN /path/to/working/dir (testingStuff)
$ vim test.txt

Administrator@BOXEN /path/to/working/dir (testingStuff)
$ git commit -a
[testingStuff 2be7063] more testing git
 1 files changed, 1 insertions(+), 0 deletions(-)

Administrator@BOXEN /path/to/working/dir (testingStuff)
$ git push
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 276 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To http://url/to/remote/repo.git
   11468d8..2be7063  testingStuff -> testingStuff
 ! [rejected]        oldBranch -> remoteTrackedByOldBranch (non-fast-forward)
error: failed to push some refs to 'http://url/to/remote/repo.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.

リモートで へのプッシュを続けたいが、入力したときにへのtestingStuffプッシュを停止したい。ブランチを削除したくありません - 同様の質問に対する多くの回答が、追跡を解除するのではなく削除することを提案しているようです。また、git push コマンドで明示的に名前を付けるだけで、特定のブランチにプッシュする方法も知りたくありません。そのようにマッスルメモリのミスが多すぎます。のみにプッシュしたい。remoteTrackedByOldBranchgit pushgit pushorigin/testingStuff

私はすでに賢くなく(それ自体を証明する言葉)、これを達成しようとして.git/configを解体しましたが、まだremoteTrackedByOldBranch.

編集:上記を実行した後の .git/config ファイルは次のようになります。

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
        hideDotFiles = dotGitOnly
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = http://url/to/remote/repo.git
[branch "master"]
        remote = origin
        merge = refs/heads/master
[branch "oldBranch"]
        remote = origin
        merge = refs/heads/oldBranch

testingStuffそこの支店については何もありません。

編集: git branch -avv出力:

Administrator@BOXEN /path/to/working/dir (testingStuff)
$ git branch -avv
  master                                 721aa61 initial setup
  projectFork1                           e132f5f Fixed Construction grid labels getting sliced.
  projectFork2                           1d20317 initial load
  oldBranch                              1d20317 initial load
* testingStuff                           192f622 Still testing
  remotes/origin/HEAD                    -> origin/master
  remotes/origin/empty                   ec1c694 initial setup
  remotes/origin/joeUserFork1            771f43e Initial Load
  remotes/origin/master                  721aa61 initial setup
  remotes/origin/projectFork1            e132f5f Fixed Construction grid labels getting sliced.
  remotes/origin/oldBranch               1d20317 initial load
  remotes/origin/joeUserFork2            dc605e8 What was sent initially.
  remotes/origin/testingStuff            192f622 Still testing
  remotes/origin/upload_master           0d8c440 Initial Load
4

2 に答える 2

15

現在のブランチのみをプッシュします

デフォルトでは、引数なしで git push を発行するたびに、git はすべての追跡ブランチをプッシュします。現在のブランチのみをプッシュするようにします

git config push.default upstream # git 1.7.10
git config push.default tracking # older vesions use "tracking" instead of "upstream"

git を常にそのように動作させたい場合は、 --global スイッチを使用するか、単に~/.gitconfigファイルを編集してください。

リモート ブランチの追跡を停止する

git の構成は単なるファイルです。多くの場合、git 構成を調査または修正する最も簡単な方法は、単純に .git/config ファイルを開いて編集することです。

たとえば、.git/config ファイルに次のようなセクションがあるとします。

[branch "develop"]
    remote = origin
    merge = refs/heads/develop
    rebase = true

そしてあなたはそれを作ります:

[branch "develop"]
    rebase = true

あなたのブランチはもはや何も追跡しません。セクション全体を削除することもでき、git は同じように動作します。

于 2012-05-15T16:50:30.240 に答える
3

リモート ブランチとの追跡関係は、特定のブランチに関連付けられたbranch.<BRANCHNAME>.remoteおよび構成アイテムで維持されます。branch.<BRANCHNAME>.merge次のように現在の構成を確認できます。

git config --get-regexp 'branch.remoteTRackedByOldBranch.*'

そして、次のように構成を削除できます。

git config --remove-section branch.remoteTrackedByOldBranch

[これにより、このブランチに関連付けられたすべての構成が削除されることに注意してください。ただしremote、設定以外のものがある可能性は低いmergeです。ファイルを手作業で編集することで、明らかに同じことを達成でき.git/configます。]

この変更の後、git pushそのブランチをリモートにプッシュしようとしなくなります。

于 2012-05-15T16:43:23.137 に答える