git基本命令
1.初始化仓库:git init
2.添加到暂存区:git add <file>
3.提交到仓库:git commit -m <msg>
4.查看仓库状态:git status
(1)git status -s: 查看仓库的简短状态,可能会得出以下显示:
文件前两个字符分别表示暂存区状态、工作区状态。
??表示文件未跟踪。
第一个M表示文件暂存区已修改(modify),第二个M表示文件在工作区中已修改但未add到暂存区,两个M表示文件修改add到暂存区后,又在工作区中修改过,即工作区、暂存区、仓库中的文件都不相同。
第一个A表示一个新添加的文件add到了暂存区,但未提交到仓库;AM表示这个新添加的文件add到了暂存区,但又在工作区中做出了修改。
5.查看提交记录:git log
(1)git log --pretty=oneline:单行显示提交记录。
6.git diff <file>:比较文件在两个区之间的差异,后面不加<file>则比较所有有修改的文件。
(1)git diff <file>:比较工作区与暂存区;
(2)git diff --cached:比较暂存区与仓库;
(3)git diff HEAD:比较仓库与工作区。
7.git reset:版本回退,其本质是改变“分支游标”的指向。
(1)git reset <commit> -- <file>:不改变“分支游标”的指向,仅用指定commit的file覆盖到暂存区里。<commit>缺省值为HEAD。因此,git reset -- <file> = git reset HEAD -- file,即撤销文件在暂存区的修改。
(2)git reset --soft/mixed/hard <commit>:没有指定reset的文件,即重置到commit版本,因此“分支游标”发生改变,相当于废弃了commit之后的版本。<commit>缺省值是HEAD。soft指仅重置仓库,mixed为缺省值,指重置暂存区和仓库,hard指重置工作区、暂存区、仓库。
8.git checkout:检出命令,本质改变HEAD的指向。
(1)git checkout <commit> -- <file>:不改变HEAD指向,仅用指定commit的file覆盖到工作区。<commit>缺省值是暂存区的file。因此,git checkout -- <file>相当于在工作区修改未add到暂存区时撤销工作区中文件的修改。
(2)git checkout <branch>:改变HEAD指向,HEAD指向到<branch>,<branch>缺省值是HEAD。其实这里也可以git checkout <commit>,但是这样会出现“分离式指针”。所以checkout命令一般只用作切换分支用。
(3)分离式指针:即HEAD不是指向一个branch,而是指向了一个具体的commit。
9.reset与checkout的区别
后面跟file:
(1)reset将文件覆盖到暂存区,checkout将文件覆盖到工作区;
(2)reset -- file的commit缺省值是HEAD,checkout -- file的则是暂存区;
后面不跟file:
(1)reset改变“分支游标”指向,checkout改变HEAD指向;
(2)两者缺省值都是HEAD。
10.git rm <file>:删除仓库中的file。
当我们在工作区中删除某个文件后,实际上文件还保留在仓库中。当我们确定真的不需要这个文件,可用git rm将删除操作记录到暂存区,就像跟踪新文件用git add一样,然后还要git commit提交。如果我们误删了某个工作区中的文件,可用git checkout -- <file>用暂存区的文件覆盖到工作区中。
11.分支管理
(1)git branch:查看分支情况;git branch -v:查看分支情况以及显示各分支游标指向的commit;
(2)git branch <branch_name>:在当前HEAD创建分支;
(3)git checkout <branch>:切换到指定分支;
(4)git checkout -b <branch>:相当于(2)(3)的简写;
(5)git checjout -d <branch>:删除指定分支;
12.git merge <branch>:将指定的分支合并到当前分支;
13.标签管理
(1)git tag:查看标签;
(2)git tag xxx <commit>:给指定commit打标签,缺省值是HEAD;
(3)git tag -d xxx:删除指定标签。
14.git与远程库
(1)创建ssh key:ssh-keygen -t -rsa;
(2)关联远程库:git remote add origin <url>,origin是远程库的标识符(名称);
(3)git push origin master:将指定分支指向的commit推送到远程库;
(4)从远程库克隆:git clone <url>。
15.全局设定
(1)设置邮箱与用户名,用于每次提交的记录:
git config --global user.name ""
git config --global user.email ""
(2)git config --global alias.st status
设置命令别名。如上设置后,查看仓库命令变为git st。其他常见命令别名还有:
commit --> ci
checkout --> co
branch --> br
具体参考:
1.《git权威指南》(强烈推荐);
2.《gitbook》(git官方文档)。