git介绍
git是一个分布式版本管理控制系统,而SVN不是分布式的,git没有一个全局的版本号,而SVN有一个确定的全局版本号;git与SVN的结构如下图:
git工作区、暂存区和版本库(数据仓库Repository)
- 工作区:本地电脑工作的目录;
- 暂存区:stage,一般存放在.git目录先的index中,故也把暂存区有时叫索引区;
- 版本库:工作区隐藏目录.git;
三者的关系如下图:
git创建仓库
- git init:创建初始化一个本地仓库,包含工作区、暂存区和版本库,后面可以加一个指定的目录作为仓库的目录;
- git init --bare:创建一个裸库,不含工作区,一般服务器使用;
修改全局配置
- git config --global user.name “用户名”:配置用户名
- git config --global user.email “邮箱地址”::配置邮箱
- git config --get user.name :查看用户名
工作流程
- git status:查看当前目录状态,红色表示修改的文件,绿色表已添加暂存区的文件;
- git status -u no:只显示在仓库中托管的文件;
- git add + 文件名:可加多个,将修改的文件添加到暂存区;
- git add .;将所有修改的文件添加到暂存区;
- git add . -u:只提交库中托管有修改的文件;
- git rm --cache + 文件:删除暂存区的指定文件;
- git commit -m ”提交信息说明“:暂存区提交到版本库(本地仓库);
- git commit:与上面一样,交互式填写提交信息;
- git commit -a:直接提交版本库,即将添加暂存区和提交版本库两个动作一起做;
- git reset --head:使用版本库重置工作区;
版本回退
- git log:查看提交信息;
- git log --pretty=oneline:查看提交信息,每个提交信息只显示一行;
- git log --stat :显示历史提交文件信息
- git blame 文件:一列表的形式查看顶顶文件的所有历史修改记录;
- git reset --soft HEAD~1:撤销最近一次的commit;
- git reset --hard HEAD~1:撤销最近一次的add、commit以及修改的文件;
- git restore <文件>:撤销工作区(没有添加到暂存区)的修改文件;
- git reset --head 提交编号:回退到编号所对应的版本;
- git revert 提交编号:回滚编号提交的内容;
- git reflog:查看所有变动信息,默认保存三个月的记录;
- git log -G:在历史修改行中查找;
- git grep -n 查找内容;在工作区查找;
- git grep --untracked -n 查找内容;在工作区查找,只查找托管的内容;
远程仓库
有两中方式链接远程仓库,http协议和ssh协议
http协议链接需要配置.git/config配置文件,将用户名和密码写到配置文件中;
ssh协议链接可用密钥进行链接,生成密钥:ssh-keygen.exe -t rsa -c “邮箱地址”;
将共钥复制到端程账户的ssh密钥配置中即可;
首次可能回出现403错误,是由于权限问题,需要配置上面步骤;
- git remote add origin https://远端地址:建立远端与本地链接,origin是远端地址的命名,可以算便起;
- git remote -v:查看远端仓库链接;
- git clone 远程仓库地址:将远程仓库克隆到本地;
- git push origin head:master;将本地仓库中的内容同步推送到远端的master分支;
- git pull origin master:brantest:经远程仓库origin的maser分支与本地的brantest分支合并
- git push origin :brantest:删除远端分支;
git分支
- git branch:查看分支,当前分支为绿色,且有*号;
- git branch -avv:查看分支详细信息;
- git branch 分支名:创建分支;
- git checkout 分支名:切换分支:
- git checkout -b 分支名:创建并切换到该分支下;
- git branch -d 分支名:删除分支;
- git merge 被合并的分支名:合并分支到当前分支
- git rebase 被合并的分支名:与merge效果一样;
解决冲突:
1、git pull:先拉去分支
2、手动修改冲突内容
3、重新提交:git add 文件–>git commit–>git push
git保存工作区文件
- git stash:保存当前工作进度,并将工作区文件和暂存区恢复到修改之前;
- git stash save message:作用同上,message为注释;
- git stash list:显示保存工作进度列表,编号越小代表保存进度时间越近;
- git stash pop stash@{num}:恢复工作进度到工作区,stash@{num}为可选项,没有该参数表示最近一次的工作进度;
- git stash apply stash@{num}:可重复恢复工作进度到工作区(追加),stash@{num}为可选项;
- git stash drop stash@{num}:删除保存的工作进度,stash@{num}为可选项;
- git stash clear:删除所欲保存工作进度
git瘦身
git reflog expire --expire-unreachable=now --all:设置不可达立即过期,默认可达90天过期,不可达30天过期;
git gc --prune=now -aggressive:清理过期的分支文件;
修改提交
- git commit --amend:修改提交,会改变哈希值,但是不是产生新的提交;
- git commit --amend --author=”作者信息“:修改作者信息;
commit已经push了,就不能修改提交
https://mp.weixin.qq.com/s/xy_lKQ9zqyeS8bWuGSyMeA
https://www.runoob.com/git/git-tutorial.html