我是Git分支复杂的新手.我总是在一个分支上工作并提交更改,然后定期推送到我的远程源.
在最近的某个地方,我重置了一些文件以使它们脱离提交暂存,后来又做了一个rebase -i去除几个最近的本地提交.现在我处于一种我不太了解的状态.
在我的工作区域,git log显示我所期待的 - 我在正确的火车上,我不想要的提交,以及那些新的,等等.
但是我只是推送到远程存储库,并且有什么不同 - 我在rebase中杀死的一些提交被推送,而本地提交的新提交不存在.
我认为"master/origin"与HEAD分离,但我不是100%清楚这意味着什么,如何使用命令行工具将其可视化,以及如何修复它.
使用git我做了这样的事情
git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)
Run Code Online (Sandbox Code Playgroud)
因为它告诉我,当我处于一个独立的头状态时,我仍然可以犯下这样做.但现在我想要合并我的分离头分支和我的本地主分支,然后将我的一堆更改推送到origin/master.
所以我的问题是如何将主分支与我的实际状态合并(分离头)
我试图按照Git的说明:"目前不在任何分支上." 有没有一种简单的方法可以回到分支上,同时保持变化?但git checkout似乎被打破了:
$ git checkout origin/web-zach
HEAD is now at 1366cb1... Changed so css files not ignored
$ git status
# Not currently on any branch.
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .cordova/config.xml
# www/languages/pt/sounds/
nothing added to commit but untracked files present (use "git add" to track)
Run Code Online (Sandbox Code Playgroud)
更具体地说,我担心"目前没有任何分支"的消息.git checkout在这里似乎没有做任何事情......这个命令的全部目的不是把我放在树枝上吗?我怎样才能回到分支并再次提交/推送?
我刚刚回到一个我已经使用 Git 大约 6 个月的项目,看到了这个:
$ cd /d/DEVELOP/BlenderAe # My repo root
$ git status
fatal: not a git repository (or any of the parent directories): .git
Run Code Online (Sandbox Code Playgroud)
这绝对是正确的路径,为什么 git 无法识别我的本地克隆?
我最后的行动是:
git文件夹内容如下:
$ cd /d/DEVELOP/BlenderAe # My repo root
$ ls .git
ORIG_HEAD objects/ refs/
Run Code Online (Sandbox Code Playgroud)
我确实有当前的代码(在 git 之外对其进行了备份)。我该如何重新连接?还有我的 github 远程吗?
修复后ORIG_HEAD我看到:
$ git status
Not currently on any branch.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: (old_file1).py
...all …Run Code Online (Sandbox Code Playgroud)