gpt4 book ai didi

从分离头切换回分支时的 Git "commits left behind"

转载 作者:太空狗 更新时间:2023-10-29 13:36:27 25 4
gpt4 key购买 nike

对于我们 repo 中的某些提交(但不是全部),如果我检查提交,然后返回到 master 分支,我会收到关于提交被遗忘的意外警告:

# Check out one of the commits in question:
$ git checkout dd33caa5b004b0e3bd449152f9335e40450db91c
Note: checking out 'dd33caa5b004b0e3bd449152f9335e40450db91c'.

You are in 'detached HEAD' state. You can look around, make experimental
[...]
HEAD is now at dd33caa... Organized DataStore build files, added cleanup targets.

# Now switch back to the master branch so I can work:
$ git checkout master
Warning: you are leaving 17 commits behind, not connected to
any of your branches:

dd33caa Organized DataStore build files, added cleanup targets.
4916eec Fixes to C++ codegen to use maven features.
a26291d Merge branch 'master' of [redacted origin repo address]
93ae0b9 Add protobuf 2.4.1 jar file to install scripts. Add QTDIR to build script.
... and 13 more.

If you want to keep them by creating a new branch, this may be a good time
to do so with:

git branch new_branch_name dd33caa5b004b0e3bd449152f9335e40450db91c

Switched to branch 'master'

所有有问题的提交(据我所知)都可以从 master 访问,并且在分离头状态下我没有进行任何提交(这是我们存储库的干净克隆)。 master 分支的历史是这样的:

* 04d7fcc (HEAD, origin/master, origin/HEAD, master) Removed files from DataS
* ecaa2f5 Fixed .gitignore.
* dd33caa Organized DataStore build files, added cleanup targets.
* 4916eec Fixes to C++ codegen to use maven features.
* a26291d Merge branch 'master' of [redacted]
|\
| * 93ae0b9 Add protobuf 2.4.1 jar file to install scripts. Add QTDIR to buil
| * 3cba845 switched to protobug 2.4.1 jar files
| * 1046d22 fixed GATEWAY_ROOT
| * ebcda06 edit windows build scripting path for new repo location
| * bda1e17 add windows build scripts from old repo
* | 371883d Merge branch 'master' of [redacted]
|\ \
| |/
| * 771c579 Fix MCast and RMCast service names in gateway manager config
* | 864fb25 First cut at DataStore code generation update to sync with refact
|/
* f505e46 Testing new repository
* 111d89a Merge branch 'master' of [redacted]

知道这里会发生什么吗?它似乎与一个特定用户的提交有关,我可以在 OSX 上用 Git 1.7.9.6 和在 Ubuntu 上用 Git 1.7.9.5 重现它,但在 Ubuntu 上用 1.8.0 不能重现……所以可能是 Git 错误?不过,我在发行说明中没有看到任何看起来相关的内容......

最佳答案

是的,这看起来像一个 Git 错误。如果您想找出修复它的原因,可以进行二分法。克隆 git.git ,检查一个损坏的版本并验证问题是否发生,检查最新版本并验证它是否已修复,然后运行二分法以查找哪个提交修复了问题:

$ git clone git://github.com/git/git.git
$ cd git
$ git checkout v1.7.9.5
$ make
$ (cd my-repo && /path/to/my/git checkout dd33caa && /path/to/my/git checkout master 2>&1 | grep "leaving .* commits behind")
$ git checkout v1.8.0
$ make
$ (cd my-repo && /path/to/my/git checkout dd33caa && /path/to/my/git checkout master 2>&1 | grep "leaving .* commits behind")
# if the above gave the expected results:
$ git bisect start v1.7.9.5 v1.8.0
$ git bisect run bash -c "make && cd my-repo && /path/to/my/git checkout dd33caa && (! /path/to/my/git checkout master 2>&1 | grep -q 'leaving .* commits behind')"

那应该让你留在修复你的错误的提交上。请注意,我们所做的与通常的二分法相反,在二分法中您试图找到引入错误的提交。

关于从分离头切换回分支时的 Git "commits left behind",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13480346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com