PRE
工作区(working tree)——暂存区(index/stage)——仓库(repository)
创建仓库
git init
会根据当前的目录创建一个本地仓库
git remote add
创建仓库后可以关联空的远程仓库
git push -u
将本地创建的仓库推送至远程仓库,u即upstream,在没关联远程仓库的分支时可以用这个
克隆远程仓库
git clone
工作区提交至暂存区
git add <filename>
git rm <filename>
暂存区增加、删除,命令后面加的是工作区的文件路径
git status
查看状态
暂存区提交至仓库
git commit
撤销本地仓库至上一版本
git reset --soft HEAD^
git reset --mixed(默认) HEAD^
同时撤销暂存区的
git reset --hard HEAD^
同时撤销工作区的
git log
查看提交日志
git reflog
查看命令日志
撤销暂存区修改
git reset [--mixed] [HEAD]
git diff
比较工作区与暂存区
git diff --cached
对比暂存区与本地仓库
git diff HEAD
对比工作区与本地仓库
对于工作区文件的修改,IntelliJ IDEA处理commit操作时自动将工作区的变更加到暂存区后commit
reset还可以跨分支操作,相当于把原来的分支删除并把HEAD移动到参数指定的版本
撤销工作区修改
git checkout HEAD <filename>
会同时对暂存区恢复
git checkout <filename>
从暂存区恢复到工作区
git checkout master~1
HEAD移动到master前一版本
非文件的git checkout基本上就是移动HEAD了,同时更新暂存区与工作区
对非文件的操作(如checkout到另外的分支等),如果工作区的修改有冲突,则checkout失败,否则保留工作区的修改并移动HEAD
checkout master~1等把指向某一历史会使HEAD处于游离状态(匿名分支)
git checkout -b new
可以在匿名分支上创建一个分支,以此进行跟踪
创建分支
git branch dev
切换分支
git switch dev(git checkout dev)
git switch -c dev(git checkout -b dev)
创建并切换分支
git stash
工作区和暂存区是所有分支共享,切换前可以先保存这个分支的现场
git stash list
查看
git stash apply
恢复
git stash drop
删除
git stash pop
恢复并删除
查看分支
git branch
合并分支
git merge dev
工作区、暂存区任一地方有与参数中的分支有冲突都会造成merge失败
两分支已commit部分有冲突的话需要解决冲突
git merge --abort
取消合并
更新远程仓库信息
git fetch
按提交追平
git cherry-pick
抓取远程分支
git pull origin/dev dev
等同于git fetch + git merge
推送分支
git push origin dev
一圈搞下来,感觉还是挺复杂的,特别是工作区与本地仓库中间还有暂存区,相当于多了暂存区的一些操作。