文章目录
Git 是一个内容寻址文件系统。 即Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索(retrieve)该内容。
git基础
git init
初始化git仓库,即建立.git目录。.git包含了几乎所有 Git 存储和操作的对象。 如若想备份或复制一个版本库,只需把这个目录拷贝至另一处即可.目录结构如下图:
git clone [url]
从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。
git clone url
或者 git clone url locname
locname是创建的本地仓库的名字,若不指定则默认与远程仓库同名。
git status
查看文件状体,每个文件不外乎四种状态:未跟踪,未修改,已修改,暂存
添加或修改.gitignore文件,可以使某些文件不出现在未跟踪列表里。
git status
或者git status --short
或者git status -s
,加short或-s表示状态概览。
git add
添加文件到缓存, git add filename
或 git add filename1 filename2 ...
或 git add -u
或 git add .
或或 git add *.cpp
等等
git reset filename
取消暂存
git checkout filename
取消修改,恢复到最近一次的commit(这个操作是不可恢复的,因为filename尚未提交到git)
git diff
未暂存部分的具体改变
git diff --staged
可查看已暂存部分的改变
git diff filename
查看某文件的修改
git difftool -d object1 object2
可图形界面查看不同,object1,2为commit对象或者分支对象
git commit
git commit - m "remark"
提交暂存中的内容
git commit -a -m "remark"
= git add -u
+git commit -m "remark"
git commit --amend
修改上次提交
每次commit都会对应一个commit对象,该对象中会包含一个(其实也不一定是一个,merge时也会生成新的commit对象,那时的父对象将有两个)指向父对象的指针,和还有一个树对象,这个树对象将包含本次提交的所包含的文件及目录的blob。
- 下图中
git log -1
查看最新一次commit ,e2172a*** git cat-file -p e2172a
(此处只用写5位即可,也可以多写)可以查看对象内容。 可以看到commit对象中包含一个tree,一个parent。- 继续查看tree,可以看到完整的目录结构。
也可以通过命令git cat-file -p master^{tree}
查看最新一次提交的树对象,结果是一样的,见下图。
git rm
git rm filename
从暂存区移除文件。
git rm --cached filename
从暂存区移除,但是不从工作目录删除(用于处理忘记加到.gitignore中的文件们)
git mv
git mv file_from file_to
= mv file_from file_to
+git rm file_from
+git add file_to
git log
git log
查看提交历史
git log --stat
查看提交历史,并显示统计信息
git log -p
查看提交历史,并显示提交差异
git log -6
查看最近六次提交历史
git log --graph
查看提交历史,并图形化显示分支和合并,比较有用的一个命令
git remote
git remote
查看远程仓库
git remote -v
查看远程仓库,并显示url
git remote add <shortname> <url>
添加一个新的远程 Git 仓库,同时指定shortname作为远程仓库的简写。
git fetch 与git pull
git fetch
将数据拉取到你的本地仓库,并不会自动合并或修改你当前的工作,git pull会进行合并操作。
git push
git push origin master
将master分支推送到origin服务器。
git tag
git tag
列出已有标签
git tag -a v1.0 -m "version 1.0"
打一个附注标签
git tag v1.0
打一个轻量标签
分支
git branch b1
新建分支b1
git checkout b1
切换到b1分支
git checkout -b b1
= git branch b1
+git checkout b1
git merge b2
将b2 merge到当前分支