1.使用场景模拟

  1. # 正常提交
  2. # 1. 检查工作区的代码变化
  3. git status # 仅能够查看到工作区的代码变化
  4. # 2. 将变化的文件添加到index
  5. git add . # 表示添加当前目录下的全部文件,到暂存区
  6. # 3. 提交到本地仓库
  7. git commit -m "commit new files to local repository"
  8. # 4. 提交到远程仓库
  9. git push [origin master] # 把当前分支,提交到远程的master分支
  10. # 5. 查看提交记录
  11. git log --stat # 查看提交记录
  12. git show --stat # 查看commit的记录
  13. git show [commit_ID] # 查看指定commit hashID的所有修改
  14. git show commit_ID fielName # 查看某次commit中具体某个文件的修改

回滚:

  • —hard:(1) 要放弃目前本地的所有改变時,即去掉所有add到暂存区的文件和工作区的文件,可以执行 git reset -hard HEAD 来强制恢复git管理的文件夹的內容及状态;(2) 真的想抛弃目标节点后的所有commit(觉得目标节点到原节点之间的commit提交都是错了,之前所有的commit有问题)。

  • —soft:原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files),所以假如我们之前工作目录没有改过任何文件,也没add到暂存区,那么使用reset —soft后,我们可以直接执行 git commit 將 index暂存区中的內容提交至 repository 中。为什么要这样呢?这样做的使用场景是:假如我们想合并「当前节点」与「reset目标节点」之间不具太大意义的 commit 记录(可能是阶段性地频繁提交,就是开发一个功能的时候,改或者增加一个文件的时候就commit,这样做导致一个完整的功能可能会好多个commit点,这时假如你需要把这些commit整合成一个commit的时候)時,可以考虑使用reset —soft来让 commit 演进线图较为清晰。总而言之,可以使用—soft合并commit节点

  • —mixed(默认):(1)使用完reset —mixed后,我們可以直接执行 git add 将這些改变果的文件內容加入 index 暂存区中,再执行 git commitIndex暂存区 中的內容提交至Repository中,这样一样可以达到合并commit节点的效果(与上面—soft合并commit节点差不多,只是多了git add添加到暂存区的操作);(2)移除所有Index暂存区中准备要提交的文件(Staged files),我们可以执行 git reset HEADUnstage 所有已列入 Index暂存区 的待提交的文件。(有时候发现add错文件到暂存区,就可以使用命令)。(3)commit提交某些错误代码,或者没有必要的文件也被commit上去,不想再修改错误再commit(因为会留下一个错误commit点),可以回退到正确的commit点上,然后所有原节点和reset节点之间差异会返回工作目录,假如有个没必要的文件的话就可以直接删除了,再commit上去就OK了。

# 回滚
# 1. 查看提交记录
git log

# 2. 回滚
## reset --hard  重置HEAD和branch同时,重置stage区还有工作目录里面的内容
git reset --hard [commit-id]      # 强制回滚

## reset --soft: 重置HEAD和branch,保留工作目录和暂存区的内容,并把重置HEAD所带来的的新差异放进暂存区
git reset --soft HEAD^


## reset 不加参数(mixed):保留工作目录,并清空暂存区
git reset --mixed HEAD^     # 工作目录和内容和 --soft一样被保留,但和--soft区别:会把暂存区清空,并把源节点和reset节点差异放到工作目录

# 3. 查看所有分支操作
git reflog        # 查看所有分支操作(commit 和 reset操作),包括已经删除的commit记录, git log不能查看到已删除的commit

# 4. 恢复
git reset –hard commit_ID   # 将记录删除,进行恢复
git cherry-pick commit_ID

本地存储的变化:
image.png

# 1. 从仓库返回到工作区:
git reset --soft commid_ID         # 将某一次的提交回滚到index(暂存区)
git reset HEAD file_name           # 按照某一个文件进行回滚
git checkout -- file_name          # 将文件的变化取消