Git是分布式版本控制系统,特别适合多人协作开发。2005年Linus用了10天时间,开发了第一版Git,用于管理linux内核的代码(from wiki)。GitHub是一个源代码托管服务平台,使用Git作为版本控制软件,2018年被微软收购。
Git内部会有一个Repository,给代码库做快照,每一次commit,都会把完整的代码库进行快照,并保存起来。
git config --global -e
git config --global user.name
git init
- 初始化当前目录为代码库
git add .
- 把新修改的文件放入stage area。stage area相当于一个缓冲区。
git commit [-m desc]
- 把stage area的文件作为正式的代码提交,放到Repository中。
- 如果不加
-m
,可以打开默认的编辑器,写比较长的commit描述
git status [-s]
- 查看当前work tree,stage area,repository的情况,可以看到哪些代码做了变更,哪些准备commit
-s
选项可以简化status的输出
git diff [--staged]
- diff命令可以查看working dir和stage area中代码的区别
--staged
选项,可以查看stage area和最后commit的代码的区别
git log --oneline
- 查看代码库提交历史
--oneline
选项可以简化输出
git show [commit id] [HEAD~n]:<filename>
- 可以查看具体某次commit的时间,作者,修改的文件,和内容
- 加上
:<filename>
可以看到在那次commit时,指定文件当时的内容
git restore
- 可以把stage area的代码,拷贝回working dir,这样可以把代码复原
git restore --source=HEAD~2 <filename>
可以把指定文件恢复到以前的某次提交
git rm [--cached] file
- git rm 会删除repo、stage area,和work tree上的代码
- 加上
--cached
,会保留工作区对应文件
git checkout
- 可以切换到某一次commit
- 可以切换到某一个tag
git tag
- 对某一次commit打标签
git branch
- 在当前HEAD的commit上,开分支
git branch -r
,查看代码服务器上的分支
git switch [-C]
- 可以切换branch
-C
选项可以同时创建分支,并切换到此分支上git switch -C local-branch origin/branch
,可以切换到服务上的分支,继续开发
git merge
- 合并分支,主要是把其他分支合并到master上
--abort
可以中止merge,回到合并前
git clone
git fetch
- 把remote repo的commit拉下来,需要手动merge
git pull
- 把remote repo的commit拉下来,同时自动做merge
git push
- 把本地的修改,push到服务器上
git push origin v0.1
,这样可以推送tag,git push origin --delete v0.1
,删除服务端taggit push origin --delete <branch name
删除服务端branch
Git接触也有近10年,原来一直用错了。之前都是用CVS,而且没有多人开发同一模块的情况,现在有多人开发一份代码的时候,有必要重学一遍Git。