git 配置和命令 与 svn 的区别
git 配置和命令
一、用户信息配置以及底层命令
1. 用户信息配置
git config --global user.name "example"
git config --global user.email example@example.com
要检查已有的配置信息,可以使用 git config --list 命令
删除配置信息 git config --global --unset user.email
2. 底层命令(基本的 linux 命令)
clear :清除屏幕
echo 'test content':往控制台输出信息 echo 'test content' > test.txt
ll :将当前目录下的 子文件&子目录平铺在控制台
find 目录名: 将对应目录下的子孙文件&子孙目录平铺在控制台
find 目录名 -type f :将对应目录下的文件平铺在控制台
rm 文件名 : 删除文件
mv 源文件 重命名文件: 重命名
cat 文件的 url : 查看对应文件的内容
vim 文件的 url( 在英文模式下)
按 i 进插入模式 进行文件的编辑
按 esc 键&按:键 进行命令的执行
q! 强制退出(不保存)
wq 保存退出
set nu 设置行号
二、创建工作目录,对工作目录进行修改
git add ./ git hash-object -w fileUrl 生成一个 kry(hash值):val(压缩后的文件内容)存到 .git/objects git update-index --add --cacheinfo 100644 hash test.txt 往暂存区添加一条记录(让 git 对象对应上 文件名)存到 .git/index git commit -m "注释内容" git write-tree 生成树对象 echo 'first commit' | git commint-tree treehash 生成一个提交对象 查看 git 是如何存储数据的 find .git/objects -type f 返回=> .git/objects/d6/70460b4b4aece5915caf5c68
根据键值拉去数据
git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4 查看内容
git cat-file -t d670460b4b4aece5915caf5c68d12f560a9fe3e4 查看对象类型 (返回 blob 类型)
查看暂存区当前的样子
git ls-files -s
三、git 高层命令(需记忆)
git init 初始化仓库 git status 确定文件当前处于什么状态 git diff 查看哪些修改没有暂存 git diff --cached 或者 git diff --staged(1.6.1以上) 查看有哪些修改被暂存了还没有提交 git add ./ 将修改添加到暂存区 git commit 注释多的时候使用 git commit -m "注释" 注释少的时候使用 git commit -m -a "注释" 跳过暂存区(git add 步骤)提交 git rm file 删除文件 git mv file.from file.to 文件重命名 git log 查看日志 git log --pretty=oneline 日志排成一行 git log --oneline 日志排成一行简写 git log --oneline --decorate --graph --all 查看项目分叉历史
四、git 分支命令(分支的本质是一个提交对象)
HEAD:
是一个指针,它默认指向 master 分支,切换分支时其实就是让 HEAD 指向不同的分支
每次有新的提交时,HEAD 都会带着当前指向的分支一起往前移动
git branch 查看所有分支 git branch name 创建分支 git checkout name 切换分支 => git checkout -b name 新建分支并切换到创建分支(语法糖)
注:每次切换分支前,当前分支一定是干净的(已提交状态) 切换前先 git status 查看一下
git branch -v 可以查看每一个分支的最后一次提交 git branch -D name 强制删除分支
git branch name commitHash 新建一个分支并且使分支指向对应的提交对象
git config --global alias.别名 命令 配置别名(参数较多时需要加 引号 )
git merge name 合并分支(前提是 分支是干净的,并且要切换到 master )
git branch --merged 查看合并到当前分支的分支列表,一旦出现在这个列表中,就应该删除
git branch --no-merged 查看没有合并到当前分支的分支列表,一旦出现在这个列表中,就应该观察一下是否需要合并
五、svn 与 git 的区别
## 集中式(snv)
svn 因为每次存的都是差异,需要的硬盘空间会相对的小一点,可是回滚的速度会很慢
优点:
代码存放在单一的服务器上,便于项目的管理
缺点:
服务器宕机:员工写的代码得不到保障
服务器炸了:整个项目的历史记录都会丢失
## 分布式(git)
git 每次存的都是项目的完整快照,需要的硬盘空间会相对大一点(git 团队对代码做了极致的压缩,最终的实际空间比 svn 大不了多少,可是 git 的回滚速度极快)
优点:
完全的分布式
缺点:
学习起来比 svn 陡峭
六、git 存储、撤销、数据恢复、打tag
git stash 会将当前分支上的工作推到一个栈中
git stash apply 将栈定的工作内容还原,但不让任何内容出栈
git stash list 查看存储
git stash drop 取出栈顶的工作内容后,就应该将其删除掉
git stash pop git stash apply + git stash drop
git checkout --filename 撤回自己在工作中目录中的修改(工作区)
git reset HEAD filename 撤回自己的暂存(暂存区)
git commit --amend 重新给用户一次机会改注释(版本库)
reset 三部曲(原理)
第一部:git reset --soft HEAD~ (--amend)
只动 HEAD (带着分支一起移动)
第二部:git reset [--mixed] HEAD~
动 HEAD (带着分支一起移动),动了暂存区
第三部:git reset --hard HEAD~
动 HEAD (带着分支一起移动),动了暂存区,动了工作目录
git checkout commit hash & git reset --hard commit hash 的区别
1. checkout 只动 HEAD --hard 动 HEAD 而且带着分支一起走
2. checkout 对工作目录是安全的 --hard 是强制覆盖工作目录
git branch recover-branch hash 数据恢复
git tag 列出标签
git tag v1.0
git tag v1.0 hash 创建标签
git show v1.0 查看标签
git tag -d v1.0 删除标签
git checkout v1.0 切换分支(会产生头部分离,要用 git checkout -b "v1.0" 创建一个分支)
七、团队协作基本流程
1. 项目经理初始化远程仓库
一定要初始化一个空的仓库:在 github 上操作
2. 项目经理创建本地仓库
git remote -v 查看仓库
git remote add 别名 仓库地址 (https | ssh)
git init 将源码复制进来
git config 修改 用户名 和 邮箱
git add git commit
3. 项目经理推送 本地仓库 到 远程仓库
清理 windows 凭据
git push 别名 分支 => 输入用户名 密码,推完之后会附带生成远程跟踪分支
4. 项目邀请成员 & 成员接收邀请
在 github 上邀请
5. 成员克隆远程仓库
git clone 仓库地址(在本地生成 .git 文件,默认为远程仓库配了别名 origin),默认主分支有对应的远程跟踪分支
只有在克隆的时候,本地分支 master 和 远程跟踪分支 是有同步关系的
6. 成员作出贡献
修改源码文件
git add git commit git push 别名 分支名 => 输入用户名 密码,推完之后会附带生成远程跟踪分支
7. 项目经理更新修改 git fetch 别名(将修改同步到远程跟踪分支上) git merge 远程跟踪分支
8. 正常的 数据推送 和 拉取步骤
1. 确保本地分支已经跟踪了远程跟踪分支
2. 拉取数据:git pull
3. 上传数据:git push
9. 一个本地分支怎么去跟踪一个远程跟踪分支
1. 当克隆的时候,会自动生成一个 master 本地分支(已经跟踪了对应的远程跟踪分支)
2. 在新建其他分支时,可以指定想要跟踪的远程分支
git checkout -b 本地分支名 远程跟踪分支名
git checkout --track 远程跟踪分支
3. 将一个已经存在的本地分支,改成一个跟踪分支
10. 做跟踪
1. 克隆仓库时,会自动为 master 做跟踪
2. 本地没有分支:git checkout --track 远程跟踪分支(remote/分支名)
3. 本地已经创建了分支:git branch -u 远程跟踪分支(remote/分支名)
11. 使用频率最高的五个命令
1. git status
2. git add
3. git commit
4. git push
5. git pull