Git基础概念
git在每次更新时,创建一个所有文件的快照。
git只能添加数据,不能清除数据,所以难以丢失数据。
git的三个工作区域:git仓库、工作目录、暂存区域。
git仓库:Git用来保存项目元数据和对象数据库的地方,从其他计算机克隆仓库时,即拷贝此处数据。
工作目录:对项目某个版本独立提取出的内容,即用于使用和修改的文件。
暂存区:一个保存了下一次将提交的文件列表信息的文件。
Git的配置命令
Git的配置信息存储在三个位置,即三个层次。
系统级,配置文件为Git的安装目录下的etc\gitconfig文件,使用--system选项的git config命令操作此文件。
用户级,用户文件夹下的.gitconfig文件,使用--global选项的git config命令操作此文件。
仓库级,仓库下的.git\config文件。
三个层次配置的优先级顺序:仓库>用户>系统
git config命令用于读写配置信息,可以通过反复执行来随时修改配置信息。
配置用户信息
git config --global user.name "tom"
git config --global user.email "tom@example.com"
note:将用户名配置为tom,用户邮箱配置为tom@example.com,配置级别为用户级。
ps:在安装完git之后,第一件事情就是配置git用户信息。
ps:用户信息会写入每一次提交。
查看配置信息
git config --list
note:查看所有配置信息。
ps:git config user.email用来查看用户邮箱信息。
Git的基础使用命令
在现有目录中初始化仓库
git init
note:将当前文件夹转为git仓库。
ps:创建一个.git文件夹,但是新初始化的仓库并没有跟踪当前文件夹的文件,需要手动跟踪。
克隆现有的仓库
git clone https://github.com/user/repository
note:将github的user用户的repository仓库拷贝到当前文件夹下,执行后,当前文件夹下有一个名为repository的仓库。
ps:git clone https://github.com/user/repository ccc,将克隆后的仓库重命名为 ccc。
git中的文件状态
git中的文件只有两种状态,已跟踪、未跟踪。
已跟踪的文件状态有未修改、已修改、已放入缓存区。
eg:克隆的仓库下的文件状态都为已跟踪未修改。
查看当前文件状态
git status
note:可以使用git status -s查看状态简览。
ps:状态简览只会显示文件状态标识+文件,??表示未跟踪文件,左M表示已修改已暂存文件,右M表示已修改未暂存文件,A表示新添加已暂存文件
跟踪未跟踪文件
git add sss.txt
note:令git跟踪新文件sss.txt,变为已暂存文件。
ps:git add的参数是路径,如果参数为文件夹,则会递归跟踪文件夹下的所有文件。
ps:常使用 git add . 命令跟踪当前文件夹下的所有文件。
将已跟踪已修改文件暂存
git add xxx.txt
note:将已跟踪未修改文件xxx.txt暂存,变为已暂存文件。
note:git add是一个多功能命令。
设置忽略文件
将一些文件设置为无需纳入git管理的文件,这些文件不会被跟踪,也不会被git status提示。
使用.gitignore文件列出需要忽略的文件模式。
查看未暂存文件变化
git diff
ps:git diff --cached 或 git diff --staged查看已暂存文件变化
提交
git commit
note:将暂存区提交,未暂存的变化不会提交。
ps:执行命令后默认进入vim编辑器,编写提交信息。
ps:可以使用git commit -m "commit message" 的方法不打开编辑器,而是直接编写提交信息。
ps:git commit -a 直接将所有变化(包括未暂存的变化)提交。
删除文件
git rm sss.txt
note:将sss.txt从暂存区删除,删除操作会被直接暂存。
ps:如果被删除的文件已经发生了改动,需要加上-f选项强制删除。
ps:如果只是直接删除文件,操作不会暂存,会被不断提示删除为未暂存文件产生的改变需要暂存。
ps:git rm --cached sss.txt 将文件从暂存区删除,即将文件标识为未跟踪文件。用以防止误暂存。
重命名文件
git rm aaa.txt ccc.txt
note:将aaa.txt重命名为ccc.txt,并且将此操作暂存。
git不关心目录,不会把空文件夹视为变化。
查看提交历史
git log -2
note:查看最近两条提交历史。
ps:添加-p选项可以查看每次提交的变化。
重新提交
git commit --amend
撤销暂存
git reset HEAD cc.txt
note:强制取消cc.txt的暂存。
撤销文件的修改
git checkout -- aaa.txt
note:将文件aaa.txt恢复到上一次提交的状态。
远程仓库是指托管在网络上的项目的版本库。
查看已配置的远程仓库服务器简写
git remote
ps:可以使用git remote -v,查看远程仓库服务器的简写以及URL。
ps:git remote show origin,查看远程服务器的详细信息。
添加远程仓库
git remote add ccc https://example
note:添加简写为ccc,url为https://example的远程仓库。
从远程仓库拉取
git fetch origin
note:从远程仓库origin中抓取直到最后一次提交的克隆。
ps:git fetch不会修改当前工作,需要手动合并。
从远程仓库拉取并且合并
git pull
note:将当前分支跟踪的远程分支内容合并到当前分支,如果当前分支没有跟踪的远程分支,那么此命令执行失败。
ps:git pull origin ccc,将远程仓库origin下的分支ccc中的内容合并到当前分支下。
推送到远程仓库
git push origin master
note:将master推送至origin服务器。
ps:默认情况下,git push origin xxx,会将xxx分支推送到远程分支xxx上,如果远程仓库origin没有远程分支xxx,则会新建一个分支xxx。
ps:git push origin kkk:ccc,将本地分支kkk推送至远程分支ccc。
远程仓库重命名
git remote rename ccc kkk
note:修改远程仓库简写名,ccc改为kkk。
远程仓库移除
git remote rm kkk
note:将远程仓库kkk移除。
标签类似于一个不可变分支。
查看所有标签
git tag
ps:git tag -l "1.0.*",查看1.0系列的所有标签。
查看指定标签
git show 1.1
note:查看1.1标签。
创建附注标签
git tag -a 1.1 -m "new version 1.1"
创建轻量级标签
git tag 1.2
ps:创建轻量级标签不需要任何选项,只需提供标签名。
后期打标签
git tag -a 1.0.1 2028
note:给部分校验和为2028的提交记录打上标签1.0.1。
推送标签
git push origin 1.1
note:将标签1.1推送至远程仓库origin。
ps:push操作不会推送标签。
ps:git push origin --tags 一次性推送所有标签。
使工作目录与标签一致
git checkout -b ttt 1.1
note:新建并移动到建立在标签1.1上的分支ttt。
为命令设置别名
git config alias.ls "!dir"
note:设置外部命令dir的别名为ls,通过git ls执行cmd的dir命令。
详细学习:https://git-scm.com/book/en/v2