git init #把当前目录变成Git可以管理的仓库
git status #可以让我们时刻掌握仓库当前的状态
git diff #顾名思义就是查看difference
git reset #回退版本
git reset HEAD 文件名 #可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reflog #用来记录你的每一次命令
git restore --staged <文件> #取消暂存
git restore <文件> #丢弃工作区的改动
git branch #创建分支
git switch -c dev #创建分支(新版git的命令)
git switch master #切换到已有的分支(新版git的命令)
git branch -d 分支名 #删除分支
git branch -D 分支名 #强制删除分支
git checkout 分支名 #切换分支
git checkout -b 分支名 #创建并切换分支
git checkout -- 文件名 #丢弃工作区的修改,让这个文件回到最近一次git commit或git add时的状态。
git checkout -b dev origin/dev #创建远程origin的dev分支到本地,创建本地dev分支
git rm #同时从工作区和索引中删除文件。即本地的文件也被删除了。
git rm --cached #从索引中删除文件。但是本地文件还存在, 只是不希望这个文件被版本控
git remote add origin git@server-name:GitHub用户名/仓库名.git # 关联远程仓库
git remote -v #查看远程库的信息
git merge dev #将dev分支合并到当前分支默认使用Fast forward模式
git merge --no-ff -m "描述" dev #将dev分支合并到当前分支禁用 Fast forward模式
# --no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并
# fast forward 合并就看不出来曾经做过合并。
git log --graph --pretty=oneline --abbrev-commit # 查看分支合并情况
git stash #可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list #
git stash apply #恢复“储藏”起来的内容,但是恢复后,stash内容并不删除
git stash drop #删除stash内容
git stash pop #恢复的同时把stash内容也删了:
git cherry-pick commitId #让我们能复制一个特定的提交到当前分支
git branch --set-upstream-to=origin/dev dev #指定本地dev分支与远程origin/dev分支的链接
git rebase #可以把本地未push的分叉提交历史整理成直线;目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
git tag v1.0 #给最新提交的commit打一个标签
git tag v0.9 <commitId> #给指定的commit打一个标签
git show <tagname> #查看标签信息
git tag -a v0.1 -m "version 0.1 released" 1094adb #用-a指定标签名,-m指定说明文字
git tag -d v0.1 #删除标签
git push origin v1.0 #推送标签到远程
git push origin --tags #推送所有未推送的标签到远程
git push origin :refs/tags/<tagname> #可以删除一个远程标签。
git reset
git reset --hard HEAD^
上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
git reset --hard 1094a
1094a 代表的是 commitId
git diff
要明白这3个概念,工作区(working tree),暂存区(index /stage),本地仓库(repository)git跟不同的参数,比较不同的区间的版本。
- git diff:是查看working tree与index的差别的。
- git diff --cached:是查看index与repository的差别的。
- git diff HEAD:是查看working tree和repository的差别的。其中:HEAD代表的是最近的一次commit的信息。
综上所述:git diff 后面跟文件名称是是查看工作区(working tree)与暂存区(index)的差别的。