试图使用这里的东西,但这并不能为我解决问题。
我在 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
现在,我将编辑该测试.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
只推送您所在的分支
默认情况下,只要您发出没有参数的 git 推送,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 将执行相同的操作。
远程分支的跟踪关系在与特定分支关联的branch.<BRANCHNAME>.remote
和branch.<BRANCHNAME>.merge
配置项中维护。 您可以看到如下所示的当前配置:
git config --get-regexp 'branch.remoteTRackedByOldBranch.*'
您可以像这样删除配置:
git config --remove-section branch.remoteTrackedByOldBranch
[请注意,这将删除与此分支关联的所有配置,但除了remote
和merge
设置之外,不太可能有任何其他配置。 显然,您可以通过手动编辑.git/config
文件来完成相同的操作。
在此更改之后,git push
不应再尝试将该分支推送到远程。