Как мне перестать выдвигать несколько удаленных веток в git? (ака, как мне отследить удаленные ветки git?)

Пытался использовать то, что здесь, но это не решает проблемы для меня.

У меня есть локальный репозиторий в git, клонированный из удаленного репо, development, Я ветвлюсь локально, чтобы поиграть с новой функцией в ветке под названием newBranchName и позвонить git push origin newBranchName настроить новую ветку на удаленном репо.

Теперь, когда я пытаюсь нажать, кажется, что мерзавец толкает мой 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 удаленно, но хочу перестать давить на remoteTrackedByOldBranch когда я печатаю git push, Я не хочу удалять какую-либо ветку - кажется, ряд ответов на подобные вопросы предлагают скорее удалить, чем отследить. Также я не хочу знать, как нажать на конкретную ветку, только явно указав ее в команде git push. Так много ошибок мышечной памяти. я хочу git push подтолкнуть к origin/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

2 ответа

Решение

Нажмите только на ветку, на которой вы находитесь

По умолчанию git будет выдвигать все ваши ветви отслеживания всякий раз, когда вы запускаете git push без аргументов. чтобы сделать это только подтолкнуть ветку, на которой вы находитесь

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 config - это просто открыть ваш файл.git/config и отредактировать его.

например, если у вас есть такой раздел в вашем файле.git/config:

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

и вы делаете это:

[branch "develop"]
    rebase = true

твоя ветка нолонжер ничего не отслеживает. Вы также можете просто удалить весь раздел, и git будет действовать так же.

Отношения отслеживания с удаленной веткой поддерживаются в branch.<BRANCHNAME>.remote а также branch.<BRANCHNAME>.merge элементы конфигурации, связанные с конкретной веткой. Вы можете увидеть текущую конфигурацию следующим образом:

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

И вы можете удалить конфигурацию следующим образом:

git config --remove-section branch.remoteTrackedByOldBranch

[Обратите внимание, что это удалит всю конфигурацию, связанную с этой веткой, но вряд ли есть что-то кроме remote а также merge Настройки. Очевидно, что вы можете сделать то же самое, отредактировав вручную .git/config файл.]

После этого изменения git push больше не должен пытаться протолкнуть эту ветку к удаленному.

Другие вопросы по тегам