我的输出如下:
(DRF_env) D:\Development\SHK\OnlyDRF\server>git branch -a
* (HEAD detached at origin/test_branch)
master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/test_branch
我做了git fetch --all
,基本上我在本地进行了一些更改,我想推送到我的仓库中存在的test_branch
。
我应该怎么做才能解决这个问题?这样我就可以将所有更改从本地推送到test_branch?
答案 0 :(得分:4)
根据该输出,您指向了遥控器test_branch
,但实际上并没有相应的本地分支。那么,我假设您的更改位于工作树中。所以:
git checkout -b test_branch
git branch -u origin/test_branch
第一个将创建本地分支并让您脱离分离头状态。第二个应该在本地和远程分支之间建立跟踪。然后添加并提交您的更改并像往常一样推送。
更新 - 评论提出了一个问题:是否需要本地分支?
本地分支是不必要的(因此git push origin HEAD:test_branch
可以工作),但它很有用,这是使用git的正常方法。如果您没有本地分支机构,并且在转移到另一个分支机构之前也不总是将更改推送到一个分支机构,那么事情将变得非常困难,并且更改可能最终会丢失(或至少很难找到。)
好消息是,实际上很容易找到当地的分支机构。在某些时候你必须说
git checkout origin/test_branch
如果您反而说
git checkout test_branch
然后git会注意到没有这样的本地分支,但是有一个同名的远程分支。因此它会创建本地分支并自动在两者之间建立跟踪。
答案 1 :(得分:0)
只需按下遥控器,指定你想将HEAD推入分支:
git push origin HEAD:test_branch
假设您不想为它创建本地分支。