git

284 阅读3分钟

先分享几个比较好的文章

理解git

git介绍

git

分布式和集中式差别

1,本地版本控制 2,可以重写提交说明 3,可以后悔 4,分支系统

git分为区域和对象

区域

  • 工作区
  • 暂存区
  • 版本库

对象

  • git对象

key:val组成的键值对(key是val对应的hash) 键值对在git内部是一个blob类型

  • 树对象 git对象代表文件的一次次版本 ,树对象代表项目一次次版本

  • 提交对象

初始化仓库

git init

git add .   先在版本库(object)生成git对象,然后将git对象放到暂存区  git hash-object -w 文件名  (修改了多少工作目录的文件,此命令就会被执行多少次)
git update-index

git commit -m ' ' 生成一个树对象,然后对树对象进行封装成提交对象
git write-tree
git commit-tree

linux命令

git init 初始化仓库

git add .  将修改添加到缓存区

git commit -m ''  将暂存区提交到版本库

git status  查看文件处于什么状态

git diff 查看哪些修改还没被暂存

git  diff --staged  查看暂存有哪些改动

git commit -a 跳过暂存区直接提交到版本库

git log  查看提交记录

git log --pretty=oneline

git rm 删除工作目录对应的文件  在将修改添加到暂存区

git mv   将工作目录的文件进行重命名 再将修改添加到缓存区

分支操作

分支是指向最新提交对象的一个指针

git branch  显示分支列表

git branch 分支名  创建分支
git branch -v   查看最后一次提交
git branch -D  分支名   删除分支  不能自己删自己 大写D强制删除,小写d需要合并后删除

git branch 分支名 hash   新建一个分支并且指向这个提交对象
git checkout 分支名   切换分支

切换分支动的三个地方:head  暂存区  工作目录
每次切换分之前 当前分支一定得是干净的 (已提交状态)

坑:在切换分支时,如果当前分支上有未提交的暂存(第一次)或者有未暂存的修改(第一次),分支可以切换成功,并且文件会被带过去,这种操作可能会污染其他分支,如果提交过了,切换就会被警告

git merge 分支名       在主分支在上merge要被合并的分支

后悔药

工作区

  如何撤回自己在工作目录中的修改
  git checkout --filename
  

暂存区

如何撤回自己的暂存
git reset HEAD filename

版本库

git commit --amend  注释写错了 修改注释
如何撤回自己的提交

reset

第一步:git reset --soft HEAD hash           等同于(--amend) 只动head(待带着分支一起动,checkout 分支的时候不带分支)

带中括号是不是必须的
第二部:git reset [--mixed]  HEAD~
动HEAD(带着分支一起动)
动了暂存区

第三部:git reset --hard HEAD~
暂存取和工作目录都变了
git checkout commithash  和 git reset --hard commithash

1,checkout只动head    --hard动HEAD而且带着分支一起走

2,checkout对工作目录是安全的  --hard是强制覆盖工作目录

创建远程库

从本地项目向远程仓库提交
git remote add  名称 路径   
git push 名称 分支名
git push -u origin master