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

 

 

posted @ 2020-08-23 19:30  青山绿水ccc  阅读(149)  评论(0)    收藏  举报