1.使用场景模拟
# 正常提交
# 1. 检查工作区的代码变化
git status # 仅能够查看到工作区的代码变化
# 2. 将变化的文件添加到index
git add . # 表示添加当前目录下的全部文件,到暂存区
# 3. 提交到本地仓库
git commit -m "commit new files to local repository"
# 4. 提交到远程仓库
git push [origin master] # 把当前分支,提交到远程的master分支
# 5. 查看提交记录
git log --stat # 查看提交记录
git show --stat # 查看commit的记录
git show [commit_ID] # 查看指定commit hashID的所有修改
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 commit 将 Index暂存区 中的內容提交至Repository中,这样一样可以达到合并commit节点的效果(与上面—soft合并commit节点差不多,只是多了git add添加到暂存区的操作);(2)移除所有Index暂存区中准备要提交的文件(Staged files),我们可以执行 git reset HEAD 来 Unstage 所有已列入 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
本地存储的变化:
# 1. 从仓库返回到工作区:
git reset --soft commid_ID # 将某一次的提交回滚到index(暂存区)
git reset HEAD file_name # 按照某一个文件进行回滚
git checkout -- file_name # 将文件的变化取消