git是文件系统快照
svn是增量式管理方式
本地库初始化
git init
设置签名
用户名 : tom
Email地址: 12@1.com
作用:区分不同开发人员
和远程仓库没有关系
项目级别:
仅在本地库生效
信息保存在.git文件夹下config文件
git config user.name tom
git config user.email tom@gmail.com
系统用户级别:
在系统环境生效
文件位置 ~/.gitconfig
git config --global user.name tom
git config --global user.email tom@gmail.com
项目级配置文件存放在 .git / config
系统级配置文件在 用户家目录下 .gitconfig
添加提交和查看状态
提交状态
git status
on branch 在主分支
no commit yet 没有提交
nothing to commit 没有可提交的
添加到暂存区
git add -A 添加所有
git add <files>
从暂存区中删除
git rm --cached <files>
提交到本地库
git commit <file>
--on branch master 在主分支
--在第一行添加提交信息
git commit -a //提交暂存区所有
gti commit -m “提交信息” <files>
从暂存区删除
git reset HEAD <files>
设置提交信息编辑器
git config -–global core.editor vim
版本穿梭
查看详细历史记录
HEAD 指向最新版本
步数指向当前版本需要几步
git log
git log --pretty=oneline //一行显示
git log --oneline //一行简略显示
git reflog //显示步数
基于索引值前进后退(推荐方式)
git reset --hard [索引值]
基于~ ^
git reset --hard HEAD^ //一个^回退一步
git reset --hard HEAD~3 //会退三步
删除文件找回
回退版本
比较文件差异
git diff <file>
将工作区的文件和暂存区的文件进行比较
git diff HEAD[索引] <file>
将工作区的文件和本地库历史版本进行比较
git diff HEAD[索引]
将所有差异文件进行比较
分支
主干 master
查看所有分支
git branch -v
创建分支
git brach [分支名]
切换分支
git checkout [分支名]
合并分支
- 切换到被修改的分支上(a合并到b,切换到b)
- 执行merge命令
git merge [分支名]
冲突解决
- 提交遇到冲突
- 编辑文件,解决冲突
- 添加到暂存区 git add
- 提交 git commit [-m] (不带文件名)
github
查看远程库别名
git remote -v
远程库地址别名
git remote add [别名] [https://地址]
推送到远程库
git push [远程库别名] [分支]
git clone 地址
git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。
推送冲突
- pull
- 解决冲突,编辑文档
- 添加暂存区
git add [文件]
- 提交到本地库
git commit -m "----"
- 推送到远程库
git push [远程仓库别名] [分支]
SSH免密登录
生成密钥
ssh-keygen -t rsa -C github邮箱号
cd .ssh
id_rsa.pub 文件内容 密钥
免每次输入密码
1.在~/.gitconfig目录下多出一个文件,用来记录你的密码和帐号
git config --global credential.helper store
2.再最后输入一次正确的用户名和密码,就可以成功的记录下来,这是最后一次麻烦啦!
git pull