这是第一篇一节课系列,会不断更新迭代。GIT是一个开源的分布式版本控制系统,
如上图先理解GIT的4个工作区域:
workspace: 工作区
index/Stage: 暂存区
Repository: 本地仓库
Remote: 远程仓库
刚写的代码都是在工作区,执行add命令后就是提交到了暂存区,再执行commit命令后就把代码提交到了版本库(本地仓库)了,最后再执行push命令把本地代码提交到远程版本库。
.gitconfig配置,mac配置到home目录下的.gitconfig即可,没有就创建一个
[alias]
st = status
co = checkout
cm = commit
br = branch
[color]
diff = auto
branch = auto
interactive = auto
status = auto
使用之前需要配置个人信息
git config --global user.name "Your Name Comes Here"
git config --global user.email [email protected]
通过log查看修改了哪些文件.
git log --stat
切分支
git checkout <分支名>
让文件恢复到最近一次commit或add的状态, "."表示指定为当前目录为恢复目录
git checkout -- .
建立本地的dev分支追踪远程仓库的develop分支
git checkout –b dev origin/develop
从指定tag建立对应的本地的ltag分支
git checkout –b ltag <tag名>
创建一个空的分支
git checkout --orphan <空分支名> //创建一具分支不会指向任何以前的提交,就是它没有历史
git rm -rf . //把当前内容全部删除,‘.’不能少。
echo '# new branch' >> README.md //创建一个空文件
git add README.md
git commit -m 'new branch'
git push origin <空分支名>
从origin拉下来一些更新,但是产生了很多冲突,你暂时没有这么多时间去解决这些冲突,因此你决定稍候有空的时候再重新pull。可以用以下命令恢复到合并之前。
git reset --hard
废弃这次提交
git reset --hard HEAD^
恢复到指定提交
git reset --hard <提交号(commit id)>
假设你已经使用git add .,将修改过的文件a、b加到暂存区,现在你只想提交a文件,不想提交b文件,应该这样
git reset HEAD b
创建本地分支
git branch <分支名>
删除本地分支,可以同时删除多个
git branch -D <分支名>
显示远程分支
git branch -r
查看远程仓库的信息
git remote show origin
对比工作区与暂存区指定文件的差异
git diff <文件名>
对比暂存区与最后一次commit指定文件的差异
git diff --cached <文件名>
两个分支上最后 commit 的内容的差别
git diff <分支名1> <分支名2>
显示出所有有差异的文件(不详细,没有对比内容)
git diff branch1 branch2 --stat
显示出所有有差异的文件的详细差异(更详细)
git diff branch1 branch2
显示指定文件的详细差异(对比内容)
git diff branch1 branch2 <具体文件路径>
找出自昨天之后你已经做了什么改变
git diff "@{yesterday}"
删除远程的分支,可以同时删除多个
git push origin :<分支名1> :<分支名2>
查看某个分支的创建者以及创建时间
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n
刷新本地仓库与远程仓库的同步相关改动,比如你远程删除了一个分支,到本地查看还有此分支,你需要用如下命令将本地仓库的对应的分支也清理掉
git remote prune origin
看有关于origin的一些信息,包括分支是否tracking(跟踪)。
git remote show origin
同时从工作区和索引中删除文件。即本地的文件也被删除
git rm
从索引中删除文件。但是本地文件还存在, 只是不希望这个文件被版本控制。
git rm --cached
将指定的提交(commit)应用于当前分支,commitHash是提交编号,cherry-pick常用于合并其他分支部分功能
git cherry-pick <commitHash>
一次应用多个提交。
git cherry-pick <HashA> <HashB>
应用一系列的连续提交,提交 A 必须早于提交 B,但不包含A提交
git cherry-pick A..B
应用一系列的连续提交,提交 A 必须早于提交 B,包含A提交
git cherry-pick A^..B
cherry-pick -m配置项告诉 Git,应该采用哪个分支的变动。它的参数parent-number是一个从1开始的整数,代表原始提交的父分支编号。
git cherry-pick -m 1 <commitHash>