我从远程存储库中获取了一个特定的错误修复。现在我有两个选择:
-
git checkout FETCH_HEAD
-
git cherry-pick FETCH_HEAD
我不确定这两种情况都发生了什么。我尝试了第一个版本,在我看来,以这种方式,我将远程存储库的更改转化为本地存储库,但我的本地更改似乎丢失了(我在代码中看不到它们(。但是,第二个选项似乎是我需要的(我在代码,我的更改和远程存储库的更改中看到(。
尽管看来我得到了所需的东西,但我仍然想更好地了解两种情况下发生的事情。
我已经看到了这个问题和答案,但是我不明白答案,因为我不知道以下短语是什么意思:
- "工作目录反映x"
- " x获取y"
您是对的 - 在第一个命令中,您刚切换到遥控器更改,而最后您在当前分支上应用了遥控器更改。
除了用于不同任务外,最重要的区别是git-cherry-pick
改变了分支的历史,而git checkout
仅用于跳到分支机构历史中的特定时间点(特定的提交(,而无需更改它。
切换分支或还原工作树文件
git-checkout
用于沿着您的分支历史记录遍历,将HEAD
变量指向特定的提交。它也用于在分支之间切换
应用某些现有提交引入的更改
git-cherrypick
在另一种方式上用于将单个分支的单个提交放置在分支历史上的另一个分支。
例如,说您有以下分支:
master:
-------
commit1 1ae4d13257425e6a0d67f35fa13e9d76c4e6987b
Date: Thu Feb 1 15:59:15 2018 +0200
commit2 cbc7776d5542f59e1e6c7c8a22add729b
Date: Thu Feb 1 15:44:41 2018 +0200
branch:
-------
commit1 c591438ff5abbcebcbf9c06f47de7aa840
Date: Thu Feb 1 15:45:24 2018 +0200
您可以使用:
切换到branch
分支 git checkout branch
,从branch
您可以执行以下操作:
git cherry-pick 1ae4d132
从分支的commit1
上播放Master的commit1
,使其:
branch:
-------
commit1 1ae4d13257425e6a0d67f35fa13e9d76c4e6987b
Date: Thu Feb 1 15:59:15 2018 +0200
commit1 c591438ff5abbcebcbf9c06f47de7aa840
Date: Thu Feb 1 15:45:24 2018 +0200
您可以使用遍历您的历史记录,并使用checkout
查看其单个状态:
git checkout c591438ff5
这将指向HEAD
提交c591438ff5
,向您显示樱桃挑选之前的分支状态(>,但不会更改历史记录(
cherry-pick
允许您从另一个分支的顶部(或其他分支的历史记录(进行一个提交,并将其应用于当前分支的顶部。
checkout
-在您的情况下,它完全用远程存储库中的分支替换了分支。 upd 。实际上,您以前的分支仍然存在于您的本地git存储中,但是在结帐后,您当前的分支,工作目录中的所有文件都将被您结帐的分支替换。
查看您将从一开始就会得到所有更改,而樱桃选择只需获得特定的更改。