本文记录一个比拟不罕用的git操作,场景为将一个库的某个分支,笼罩另一个库的某个分支。
. git_test, branch dev : github.com:xiangbin1997/git_test.git
. git_test1, branch dev : github.com:xiangbin1997/git_test1.git
用git_test1,branch dev 替换 git_test, branch dev
clone git_test1的dev分支
[postgres@hgcndn git_test1_dev]$ git clone -b dev git@github.com:xiangbin1997/git_test1.gitCloning into 'git_test1'...remote: Enumerating objects: 16, done.remote: Counting objects: 100% (16/16), done.remote: Compressing objects: 100% (12/12), done.remote: Total 16 (delta 1), reused 11 (delta 0), pack-reused 0Receiving objects: 100% (16/16), done.Resolving deltas: 100% (1/1), done.[postgres@hgcndn git_test1_dev]$ cd git_test1/
查看.git/config
[postgres@hgcndn git_test1]$ cat .git/config[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true[remote "origin"] url = git@github.com:xiangbin1997/git_test1.git fetch = +refs/heads/*:refs/remotes/origin/*[branch "dev"] remote = origin merge = refs/heads/dev
删除git_test1,dev分支对应的origin
[postgres@hgcndn git_test1]$ git remote rm origin[postgres@hgcndn git_test1]$ cat .git/config[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true[branch "dev"]
批改git_test1,dev分支对应的origin,指向git_test
[postgres@hgcndn git_test1]$ git remote add origin git@github.com:xiangbin1997/git_test.git[postgres@hgcndn git_test1]$ cat .git/config[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true[branch "dev"][remote "origin"] url = git@github.com:xiangbin1997/git_test.git fetch = +refs/heads/*:refs/remotes/origin/*
强制push到git_test的dev分支下
[postgres@hgcndn git_test1]$ git push origin dev --forceCounting objects: 16, done.Compressing objects: 100% (11/11), done.Writing objects: 100% (16/16), 1.97 KiB | 0 bytes/s, done.Total 16 (delta 1), reused 13 (delta 1)remote: Resolving deltas: 100% (1/1), done.To git@github.com:xiangbin1997/git_test.git + 5a13464...418bf50 dev -> dev (forced update)
阐明,如果不强制push会报错
[postgres@hgcndn git_test1]$ git push origin devTo git@github.com:xiangbin1997/git_test.git ! [rejected] dev -> dev (fetch first)error: failed to push some refs to 'git@github.com:xiangbin1997/git_test.git'hint: Updates were rejected because the remote contains work that you dohint: not have locally. This is usually caused by another repository pushinghint: to the same ref. You may want to first merge the remote changes (e.g.,hint: 'git pull') before pushing again.hint: See the 'Note about fast-forwards' in 'git push --help' for details.
参考
git-move-repository