工作区:指自己写代码的工作目录,未进行 git add 操作之前。
暂存区:执行过 git add 操作之后,但是为执行 git commit 操作。
本地分支:执行过 git commit 操作,但是未执行 git push 操作。
远程分支:执行过 git push 操作
三种场景介绍:
1.git add . 但是未进行 commit 操作。 暂存区
2.git commit 但是未进行 git push 操作。 本地分支
3.git push 操作了。 远程分支
第一种场景:
执行了 git add 操作 未执行 git commit 操作。
git reset HEAD . 撤回所有 add 的文件
git reset HEAD 文件名 撤回指定的文件
这个命令只改变暂存区代码,并不影响其他区域代码。
第二种场景:
执行了 git commit 操作 未执行 git push 操作。
// 恢复最近一次 commit
git reset --soft HEAD^
1.先git log 查询提交日志 找到自己需要回滚的 版本号(commit_id)
2.git reset --hard commit_id 撤销commit提交以及代码的修改
或者
git reset --hard HEAD^ 回退到最近一次的提交
HEAD^ 的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
或者
git reset commit_id 仅仅撤销本地仓库的commit提交,代码不变
慎用 git reset --hard commit_id(版本号) 因为它会把自己工作区的修改内容也给删除掉!!!
而 reset --soft相当于后悔药,给你重新改过的机会。对于上面的场景,就可以再次修改重新提交,保持干净的 commit 记录。
如果 commit 注释写错了,我们可以使用 。
git commit --amend -m "备注" 既可以覆盖上一次的备注信息。
第三种场景
第三种场景进行撤回的命令和第二个场景撤回命令一样。但是撤销之后 需要 进行 git push -f origin branchName 操作。这样远程仓库对应分支代码就会回滚掉。
注意:一定要注意回滚指定版本号,不应该是最新提交的版本号,而应该是最新一次commit之前的版本号,否则无法进行回滚的。
合并某个分支上的单个commit
首先,用git log或者编辑器工具查看一下你想选择哪些commits(后面一串数值)
然后,切换到目标分支 git checkout 分支
再然后(目标分支上) 合并操作 git cherry-pick 82ecb31(commits值)
最后别忘了关键一步(目标分支上) git push 操作(网上搜到的 都没说明这一步,巨坑)
stash
官方解释:当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用git stash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。
stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。
相关命令
// 保存当前未commit的代码
git stash
// 保存当前未commit的代码并添加备注
git stash save "备注的内容"
// 列出stash的所有记录
git stash list
// 删除stash的所有记录
git stash clear
// 应用最近一次的stash
git stash apply
// 应用最近一次的stash,随后删除该记录
git stash pop
// 删除最近的一次stash
git stash drop
另附上:
git命令思维导图一张