Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何签出提交';谁的孩子?_Git_Git Branch_Git Bash_Git Commit_Git Checkout - Fatal编程技术网

Git 如何签出提交';谁的孩子?

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获取所有提交的历史记录,并

如何在头部之前引用提交

例如,在HEAD后面1 commit的commit是HEAD~1

我如何相对于头部向相反方向移动

基本上,我做了一个
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]