git的核心思想是:
工作区 暂存区 分支仓库
工作区 暂存区是全局的,和分支无关的!
分支切换只是改变commitID而已。 内容即也是更改在分支版本库中的
HEAD指向,MASTER 指向, 分支指向的产物。
1 克隆一个git仓库的开发项目
1
|
git clone <git url>
|
给自己的仓库命名和配置邮箱选项(这个可以省去,但是系统会提示自动给你分配用户和邮箱,还是自己设定一下吧)
1
2
|
git config --global user.name
"andy"
git config --global user.email
"735896273@qq.com"
|
如果没有设置,系统会将你系统的用户名(root)和root@主机名作为邮箱
2 在该目录下苍创建文件,创建文件后要add commit的常用操作
1
2
|
git add <youfile>
git add .
|
git commit -m "提示标记信息"
3 要查看状态
1
2
3
|
git status
git log -p -2
# 查看最近两次详细修改内容的diff,以patch补丁形式查看
git remote -
v
|
4 发现不对要撤销
1
2
|
git checkout <your
file
>
git checkout .
|
1
2
|
git reset <youfile>
git reset .
|
5 如果有分支
查看分支信息
1
2
|
git branch
git branch -
v
|
新建分支
git branch <new branch>
删除分支
git branch -d <you branch>
强制删除
git branch -D <you branch>
6 提交到远程
1
|
git push origin master
|
7 常用工具
1
|
git mergetool
|
对比工作区和stage区的文件差异
1
|
git
diff
|
8 回滚
方法一:
找到你要回滚的版本
1
|
git log --pretty=oneline 和 git log --oneline差不多
|
回到指定的版本号
1
|
git reset --hard a7a84e6547626f304efa2067b568f4077998030f
|
同步远程仓库
1
|
push push origin master -f
|
方法二:
直接切回指定的版本号:(游离态)
1
|
git checkout a7a84e6547626f304efa2067b568f4077998030f
|
切回master
1
|
git checkout master
|
克隆一个分支到本地,本地会有一个git的项目目录
git clone <git url>
git remote -v
git status
git remote add ops15 ops@10.59.76.15:/home/ops/ops_controller
git add .
git add -A
git add youfile
git stash
git diff
git log -p
git log -p -2
git mergetool
git branch
git checkout
git pull origin master
git push origin master
git rm filename (等于 rm filename git rm filename)
git mv filename(等于 mv filename git mv filename)
撤销工作区的所有修改
git checkout .
撤销工作区的指定文件的修改
git checkout <youfile>
撤销所有的stage区域 到工作区
git reset .
查看所有分支
git branch
删除指定分支
git branch -d <you branch>
查看各个分支的提交状况
git branch -v
创建新分支
git branch <new branch>
【重点理解--状态】
git status -s 简短形式查看状态
M 第一列字符含义,版本库和暂存区状态有差异
M 第二列字符含义,工作区和暂存区有差异
?? 新文件,未被跟踪的文件
1 修改能不能直接提交? "不可以"
2 git diff 工作区和暂存区的比较
git diff HEAD 工作区和HEAD比较
git diff --cached 暂存区和HEAD的比较
3 将工作区的内容暂存起来--搁置问题,是各分支共享的。
git stash
git stash pop
git stash list
【重点理解-对象】
git对象
$ git log --pretty=oneline
$ git log --pretty=short --graph
$ git log --pretty=short --graph 5c2004ee59ec0ba88715caa779853078e4b4546d
git log --pretty={raw|oneline|short} --graph 提交的版本
sha1sum 算法
head 永远指向所在分支
#查看仓库中的对象类型 大小 内容
git cat-file -t sha1ID
git cat-file -s sha1ID
git cat-file -p sha1ID
git-cat-file - Provide content or type and size information for repository objects
-t 查看对象的类型
-s 查看对象的大小
-p 查看对象的内容
类型:
commit
tree
parent
blob
以下四中表达方式是一样的:
git log -1 #简写查看一条log记录
git log -1 head #查看head指向的第一条记录
git log -1 master #查看master中的第一条记录
git log refs/heads/master #查看master中的第一条记录
git cat-file blob head:test.txt #查看head指向的blob中test.txt中的文件内容
【重点理解-重置】
git重置(reset) (head可上可下就 游标的修改)
git reset
git reflog
git reflog show master
git reflog head
如果修改某一个文件(没有git add, (已经被跟踪了的文件)),想撤销这次修改(确定没有作用的文件)
git checkout filename or /dir/
如果修改某一个文件(git add过,已经暂存在暂存区),想要撤销这次修改
git reset filename
git reset .
(git reset {--soft|--hard}) 重置引用
如果已经修改某几个文件,但是想撤销到某个版本(本地版本库回到要撤销到的版本),但是当前暂存区,工作区不想撤销
git reset --soft commitid
此时git diff head会变化
如果修改了某几个文件也被提交暂存区了,想撤销到某个commit(工作区和暂存区都改变),回到一个干净的状态(git status 工作区 暂存区 版本库是和commitID中的内容一致)
git reset --hard commitid
如果想撤销到某个commit,且将暂存区同步为某个commit中的内容,但是工作区不变
git reset --maxed commitID = git reset commitID
git log和git reflog的区别:
git log只查看提交到版本库的记录
git reflog 查看所有commit 或者 reset的记录 包括已经被删除的commit记录
阅读; git commit --amend 修补提交
【重点理解--checkout检出】
切换到游离状态
分离头指针(checkout 切换的是指定的commitID 而不是分支)
git checkout commitid
git branch
git reflog
git merge commitID
git log --pretty=oneline --graph #此时会看到merge游离的状态图示
切换分支的检出
master
commit 0b62718c50c903e3e7f6a49ced2dbffa28a9b7e9
dev
commit 0bf0d2df146f5a04aa2ae5a56ab46a54c6456893
从dev切换到master 在git merge dev====> 在log中算是一个commit提交。 git log -1 git log --pretty=oneline --graph
commit 0bf0d2df146f5a04aa2ae5a56ab46a54c6456893
【命令区别】
git add . 和 git add -A 的区别
git add . 是将本路径下所有修改的文件和新的文件 add到暂存区(非本路径及本路径下的目录文件 是不会被add到暂存区的。)
git add -A 是将本路径下所有修改的、新增的、删除的 更新到暂存 相当于执行(git add . git rm .)
【仓库和裸仓库的区别】
裸仓库是一个不含有工作目录的仓库(不能执行git status的)。
初始化裸的仓库
1. git clone --bare 远程仓库 目录.git
克隆一个参考到一个裸目录(参考)
2.git init --bare 目录.git
将目录仓库为一个裸仓库
查看远程仓库的信息
git ls-remote 远程仓库 ?
删除与远程库的关联
git remote rm <name>
如:
git remote rm origin