Git 如何签出提交';谁的孩子?
如何在头部之前引用提交 例如,在HEAD后面1 commit的commit是HEAD~1 我如何相对于头部向相反方向移动 基本上,我做了一个Git 如何签出提交';谁的孩子?,git,git-branch,git-bash,git-commit,git-checkout,Git,Git Branch,Git Bash,Git Commit,Git Checkout,如何在头部之前引用提交 例如,在HEAD后面1 commit的commit是HEAD~1 我如何相对于头部向相反方向移动 基本上,我做了一个git签出头~1次3次。现在我想向前推进1次提交,有效地撤消我最后的git签出头~1。我该怎么做 我知道提交的一个分支就像一个单链表,每个提交只指向其父级。因此,如果遍历到提交的子级是不合理的,我想知道如何在它们之间向前处理。如果您的更改被推送到远程,您将能够访问子级,但不能使用HEAD作为引用。但是,您可以使用git reflog获取所有提交的历史记录,并
git签出头~1次3次。现在我想向前推进1次提交,有效地撤消我最后的git签出头~1
。我该怎么做
我知道提交的一个分支就像一个单链表,每个提交只指向其父级。因此,如果遍历到提交的子级是不合理的,我想知道如何在它们之间向前处理。如果您的更改被推送到远程,您将能够访问子级,但不能使用HEAD作为引用。但是,您可以使用git reflog
获取所有提交的历史记录,并签出所需的提交阅读此内容,了解设置新头部的所有方法
基本上,您需要决定要切换到哪个提交,并按照上面链接中解释的各种方式简单地签出该提交
git签出
这将使你回到你想要的承诺
git复位头——硬的
“移动”你的头回到想要的位置
#这将破坏任何本地修改。
#如果你有未完成的工作要做,就不要做。
git重置—硬0d1d7fc32
#或者,如果有工作要做:
暂存
git重置—硬0d1d7fc32
吉特隐藏流行音乐
#这将保存修改,然后在重置后重新应用该修补程序。
#如果您修改了以前的内容,则可能会出现合并冲突
#自您重置到的提交后已更改。
- 注:()
您还可以使用git-rebase--no-autostash
以下是可以执行的操作的一般模式。提交可以有无限的子项。如果您想查看追溯到提交的所有历史记录,您可以
git log --all --ancestry-path ^$commit
或者只是
git branch --contains $commit
git tag --contains $commit
显示他们的名字
使用您想要的任何显示选项。如果要自动查找父级为特定提交的提交,可以从
child-commits() {
git rev-list --all --ancestry-path --parents ^$1^{} \
| awk /$(git rev-parse $1^{})'/ {print $1}'
}
但是如果你只是想看看你去过哪里,用
git reflog
显示什么影响了你的大脑,以及为什么。你可以使用
git checkout HEAD@{n}
要向前移动头部,请提交n
另一种可能的解决方法是
git签出[分支机构名称]
返回分支名称的头,然后
git checkout HEAD~[n]
在您的情况下,n
可以是2
另外,使用git log
或git reflog
,您可以通过提交的SHA或
git checkout [SHA-of-the-commit]
简而言之:
git checkout$(git log--all--祖先路径^HEAD--format=format:%H | tail-n1)
说明:
git log
命令将从您当前所在的位置(^HEAD
)为您提供子项(--all--祖先路径
),仅打印哈希(--format=format:%H
)。然后,我们将该(|
)通过管道传输到tail
命令,该命令只要求最后一行,该行应包含子提交的哈希。(管道到尾部取决于平台,但可能适用于大多数Mac或类似Unix的系统。)
最后,git checkout$(…)
部分只是在子shell中运行另一部分,并获取子提交的哈希值,然后将其签出
警告:如果您有多个子提交/提交的沿袭,则遍历顺序将按照git log
,这可能(也可能不是)您所期望的顺序。目前没有引用子级()的简写方法。相关问题与解答:如果提交不再被引用(悬空,可能会被git gc
删除),您可以使用找到它。可能的重复项
git checkout HEAD@{n}
git checkout HEAD~[n]
git checkout [SHA-of-the-commit]