我从远程存储库中获取了一个特定的错误修复程序。现在我有两个选择:
git checkout FETCH_HEAD
git cherry-pick FETCH_HEAD
我不确定两种情况都发生了什么。我已经尝试了第一个版本,它在我看来,通过这种方式,我从远程存储库获取了更改到我的本地存储库,但我的本地更改似乎丢失了(我在代码中没有看到它们)。但是,第二个选项似乎可以满足我的需求(我在代码中看到了我的更改和远程存储库中的更改)。
虽然看起来我得到了我需要的东西,但我仍然希望更好地了解两种情况下会发生什么。
我看过this个问题和答案,但我不明白答案,因为我不知道以下短语是什么意思:
答案 0 :(得分:3)
你是对的 - 在第一个命令你刚刚切换到远程更改,而在最后一个命令,你在当前分支上应用了远程更改。
除了用于不同的任务之外,最重要的区别是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
顶部的主人那里播放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
,在您挑选之前显示分支的状态(但它不会改变历史记录)
答案 1 :(得分:1)
看看你会从一开始就得到所有的变化,而Cherry会选择你的具体变化。
答案 2 :(得分:1)
cherry-pick
允许您从其他分支的顶部(或从其他分支的历史记录)中提取一个提交,并将其应用于您当前的分支。
checkout
- 在您的情况下,它完全用远程存储库中的分支替换您的分支。
的 UPD 即可。实际上你以前的分支仍然存在于你的本地git存储中,但在结账后你当前的分支,你工作目录中的所有文件将被你所结账的那个分支替换。