1.git commit --amend
命令用于修改最近一次的提交。当你提交代码后,如果发现提交信息有误,或者漏掉了某些文件需要一同提交,这时就可以使用 --amend 参数来修改这次提交。下面是关于 git commit --amend 的一些详细解释和使用场景:
使用场景
修改提交信息:如果你提交后发现提交信息(commit message)写错了,或者想要更详细地描述这次提交的内容,可以使用 git commit --amend 来修改提交信息。
添加遗漏的文件:提交后突然发现还有文件没有添加进这次提交,可以使用 git add 将遗漏的文件添加到暂存区(stage area),然后使用 git commit --amend 来更新这次提交,将遗漏的文件包含进去。
合并多个提交:当你进行了一系列的小改动并分别提交了它们,但希望将它们合并为一个提交时,可以使用 git commit --amend 来实现。不过,请注意,这只能用于修改最近的提交。如果需要合并更早之前的提交,可能需要使用 git rebase 等更复杂的命令。
使用方法
修改提交信息:
直接运行 git commit --amend,Git 会打开你的默认文本编辑器(如 vim),显示最近一次提交的提交信息。你可以直接编辑这条信息,保存并退出编辑器后,Git 会用新的提交信息更新这次提交。
添加遗漏的文件:
首先使用 git add 命令将遗漏的文件添加到暂存区。
然后运行 git commit --amend,Git 会使用当前的暂存区内容更新最近一次提交,包括你刚刚添加的文件。
2.git reset HEAD^
是一个 Git 命令,用于撤销最近的提交(即将 HEAD 指针移动到上一次提交的位置)。这个命令会改变你的提交历史,因此需要谨慎使用,特别是在已经推送到远程仓库的情况下。
当你执行 git reset HEAD^ 时,Git 会做以下几件事情:
移动 HEAD 指针:HEAD 指针会从当前的提交(也就是你最近做的一次提交)移动到它的父提交(即上一次提交)。
更新工作目录和暂存区:默认情况下(即不使用 --soft、--mixed 或 --hard 选项时),git reset HEAD^ 的行为类似于 --mixed。这意味着工作目录(即你当前看到的文件内容)不会改变,但暂存区会被更新以反映上一次提交的状态。换句话说,所有自上一次提交以来被添加到暂存区的更改都会被取消暂存。
如果使用 --soft 选项(git reset --soft HEAD^),工作目录和暂存区都不会改变。这意味着你的所有更改仍然会被暂存,就像你从未执行过 reset 命令一样。
如果使用 --hard 选项(git reset --hard HEAD^),工作目录会被更新以匹配上一次提交的内容,并且所有自那次提交以来的更改(无论是暂存的还是未暂存的)都会被丢弃。这是一个危险的操作,因为它会丢失工作。
撤销提交:由于 HEAD 指针已经移动到了上一次提交,因此最近的那次提交(以及它的提交信息)会被从提交历史中移除。注意,这并不意味着那些更改被永久删除了;它们仍然存在于你的工作目录或 Git 的其他引用(如分支或标签)中。
影响远程仓库:如果你已经将更改推送到远程仓库,那么撤销提交并改变提交历史将会导致远程和本地仓库之间的不一致。在这种情况下,你需要使用 git push --force(或 git push -f)来强制更新远程仓库的引用。然而,这可能会导致其他协作者遇到问题,因为他们可能需要重新同步他们的本地仓库。
3.git stash
git stash 是 Git 中一个非常有用的命令,它用于临时保存当前工作目录和暂存区的修改(包括未跟踪的文件或更改),以便清理工作目录,同时不丢失这些修改。
保存:git stash save "xxx"
查看所有已保存的 stash 列表:git stash list
应用最近的 stash:git stash apply
这个命令会将最近的 stash 应用到当前工作目录,但不会从 stash 列表中删除该条目。
应用特定的 stash:git stash apply stash@{n}
其中 n 是 stash 列表中的索引号。这个命令允许你应用特定的 stash 到当前工作目录。
恢复并删除最近的 stash:git stash pop
这个命令与应用最近的 stash 类似,但会在应用后从 stash 列表中删除该条目。
恢复并删除特定的 stash:git stash pop stash@{n}
其中 n 是 stash 列表中的索引号。这个命令允许你恢复并删除特定的 stash。
删除特定的 stash:git stash drop stash@{n}
其中 n 是 stash 列表中的索引号。这个命令允许你从 stash 列表中删除特定的条目。
清空所有 stash:git stash clear