重置(Reset):
- 软重置(–soft):重置到指定的提交记录,保留工作区和暂存区的更改,只是将
HEAD
移动到指定的提交点。 - 保留重置(–mixed):重置到指定的提交点,保留工作区的更改,但会取消暂存区中的更改(即 unstaged)。
- 删除重置(–hard):重置到指定的提交点,工作区和暂存区的更改都会丢失,回退到提交点的状态。
例子
:
假设你有三个提交:
A -> B -> C
,现在你觉得提交
C
有问题,想要回到
B
。
- 软重置(–soft):你运行
git reset --soft B
,这样 Git 会将C
视为未提交的更改,保留这些更改在工作区和暂存区,但HEAD
指向B
,你可以再修改或提交这些更改。 - 保留重置(–mixed):你运行
git reset --mixed B
,这样C
的更改仍在工作区,但 Git 会将这些更改从暂存区中移除(取消暂存)。你可以决定是否保留或修改这些更改再提交。 - 删除重置(–hard):你运行
git reset --hard B
,这样会彻底删除C
的所有更改,Git 仓库会回到B
的状态,C
中的所有工作内容都会丢失。
还原(Revert):
还原操作是创建一个新的提交,用于撤销某个提交的更改。这个操作不会删除原有的提交记录,而是生成一个反向的提交,使得最终的效果与指定提交前一致。
- 常用于需要保留历史记录,同时撤销错误修改的场景。
例子
:
假设你做了提交
A -> B -> C
,并发现
B
有问题,但
C
没问题。
- 你运行
git revert B
,Git 会创建一个新的提交D
,这个提交D
是B
的反向提交,撤销了B
的更改,但保留了C
。所以你的提交历史变为A -> B -> C -> D
,最终的代码效果等同于没有B
。
挑拣(Cherry-pick):
挑拣操作允许你从一个分支或提交中选择特定的提交并应用到当前分支。这适用于想要部分引入其他分支中的修改,而不需要全部合并的情况。
例子
:
假设你有两个分支,
master
分支上有
A -> B -> C
,
feature
分支上有
X -> Y -> Z
。你发现
feature
分支中的提交
Y
对
master
分支很有用,但不想合并整个
feature
分支。
- 你可以运行
git cherry-pick Y
,这样Y
的更改会被应用到master
分支,新的提交历史看起来像A -> B -> C -> Y
,你只引入了Y
,而不是整个feature
分支。
签出(Checkout):
签出操作用于切换到某个分支或特定的历史提交。它让你在不同的分支之间自由切换,或者查看某个历史版本的代码。
- 签出分支:
git checkout <branch_name>
,切换到指定的分支,工作区将更新为该分支的最新提交,HEAD
将指向该分支,之后的修改和提交都会记录在该分支上。 - 签出提交:
git checkout <commit_hash>
,切换到某个历史提交,这会进入头部分离状态,允许你查看或修改该版本的代码,但新的提交不会关联到任何分支。
例子
:
假设你在
main
分支上工作,并提交了
A -> B -> C
,你想查看某个历史版本。
- 签出分支:如果你需要切换到
main
分支的最新提交,可以运行git checkout main
。你会回到main
分支的最新提交,并处于正常的工作状态。 - 签出提交:如果你想查看
B
提交的状态,运行git checkout <B的哈希值>
,你将进入头部分离状态,能够查看B
的代码,但此时不属于任何分支。如果你需要保存任何修改,可以创建一个新分支。git checkout -b<new_branch>
- 从头部分离状态返回正常状态:如果你处于头部分离状态,想回到分支,只需运行
git checkout <branch_name>
,例如git checkout main
,你会回到正常的分支工作状态。
总结:
- 重置(Reset):用于回到某个提交点,可以选择保留或丢弃更改。
- 还原(Revert):通过创建一个新的反向提交来撤销特定提交的更改。
- 挑拣(Cherry-pick):选择性地将其他分支的某个提交应用到当前分支。
- 签出(Checkout):切换到不同的分支或特定的提交,查看或修改代码。
版权归原作者 冬停 所有, 如有侵权,请联系我们删除。