Tried to use what's here, but that doesn't solve things for me.
I've got a local repo in git, cloned from a remote repo, development
. I branch locally to play around with a new feature in a branch called newBranchName
and call git push origin newBranchName
to set up the new branch on the remote repo.
Now when I try to push, git seems to be pushing my newBranchName
local branch into everything the old branch tracked as well. I want that to stop.
Here's an extended sample of what I mean. I'm going to create a local branch, add a file, commit locally, then push to a new branch on the remote server. So far, so good.
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
Now, I'll edit that test.txt file, commit the change, and push. This is what confuses me.
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.
I want to continue pushing to testingStuff
remotely, but want to stop pushing to remoteTrackedByOldBranch
when I type git push
. I don't want to delete any branch -- seems a number of answers to similar questions suggest deleting rather than untracking. Nor do I want to know how to push to a specific branch only by explicitly naming it in the git push command. Too many muscle-memory mistakes that way. I want git push
to push to origin/testingStuff
only.
I've already unsmartly (a word which proves itself) butchered my .git/config trying to accomplish this, and it's still pushing to remoteTrackedByOldBranch
.
EDIT: Here's what my .git/config file looks like after doing the above:
[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
Nothing about the testingStuff
branch in there.
EDIT: git branch -avv
output:
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
The tracking relationship with a remote branch is maintained in the branch.<BRANCHNAME>.remote
and branch.<BRANCHNAME>.merge
configuration items associated with a particular branch. You can see the current configuration like this:
git config --get-regexp 'branch.remoteTRackedByOldBranch.*'
And you can delete the configuration like this:
git config --remove-section branch.remoteTrackedByOldBranch
[Note that this will remove all the configuration associated with this branch, but it is unlikely there is anything other than the remote
and merge
settings. You can obviously accomplish the same thing by hand-editing the .git/config
file.]
After this change git push
should no longer attempt to push that branch to a remote.
Only push the branch you're on
By default, git will push all of your tracking branches whenever you issue a git push with no arguments. to make it only push the branch you're on
git config push.default upstream # git 1.7.10
git config push.default tracking # older vesions use "tracking" instead of "upstream"
if you want git to always work like that - you can use the --global switch or simply edit your ~/.gitconfig file to suit.
Stop tracking a remote branch
git's config is just a file. Quite often the easiest way to investigate and or fix your git config - is simply to open your .git/config file and edit it
e.g. if you have a section like this in your .git/config file:
[branch "develop"]
remote = origin
merge = refs/heads/develop
rebase = true
and you make it:
[branch "develop"]
rebase = true
your branch nolonger tracks anything. You can also just delete the whole section and git will act the same.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With