基本概念
工做区(Working Directory): 就是你在电脑里能看到的目录
版本库(Repository): 工做区有一个隐藏目录.git,这个不算工做区,而是Git的版本库。
暂存区 : Git 的版本库里存了不少东西,其中最重要的就是称为 stage(index)的暂存区html
git config --global user.email "jmilkfan@example.com" git config --global user.name "jmilkfan"
[user] # User info | email = jmilkfan@example.com | name = jmilkfan [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true editor = vim # 默认编辑器
针对单个项目的配置: vim projectName/.git/configgit
| repositoryformatversion = 0 | filemode = true | bare = false [remote "origin"] | url = http://fanguiju@192.168.1.1:8080/openstack/projectname | fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] | remote = origin | merge = refs/heads/master [remote "gerrit"] | url = ssh://fanguiju@192.168.1.1:8080/openstack/projectname.git | fetch = +refs/heads/*:refs/remotes/gerrit/*安装
sudo apt-get install git # OR yum install -y git本地版本库
版本库又名仓库(repository),能够简单理解为一个目录,这个目录里面的全部文件均可以被Git管理起来,每一个文件的修改、删除,Git都能跟踪,以便任什么时候刻均可以追踪历史,或者在未来某个时刻能够“还原”。sql
mkdir jmilkfanDir
cd jmilkfanDir git init
生成 .git 目录, 这个目录才是本质上的 Git 仓库, 是 Git 来跟踪管理版本库的根本。vim
touch README.md git status # 查看当前工做区的状态, 即工做区中有那些文件是和 Git 仓库中记录的内容不同的 # Or git status -s # 简约的状态查看方式 git add README.md # 添加单个文件 # Or git add . # 添加全部文件 git diff # 查看当前工做区中的文件内容与已往 Git 仓库中记录的内容有那些不一样, 强烈建议在每一次执行 commit 以前都 diff 一次来确保能完成指望的提交 git commit -m "注释, 便于记录此次提交的内容主题" # -m 只能提交单行注释, 并不规范 # Or git commit # 进入 Vim 编辑模式, 能够编辑规范的注释
status 指令: 可让咱们时刻掌握 Git 仓库当前的状态
add 指令: 本质上是将工做区中的文件记录到 Git 仓库的暂存区中, 并无真正写入到 Git 仓库
diff 指令: 看当前工做区中的文件内容与已往 Git 仓库中记录的内容有那些不一样
commit 指令: 将暂存区的内容提交到 Git 仓库中记录. 因此, add 能够指定多个文件, 最终由 commit 一次性写入到 Git 仓库.ruby
git rm README.md git commit -m "remove README.md"
删除文件也会致使工做区和 Git 版本库的不一致, 因此也须要提交操做, 来让 Git 版本库来记录这一此的改变.
NOTE: 删错了, 也能够很轻松地把误删的文件恢复到最新版本bash
git checkout -- README.md
Git 仓库的版本被称为 commit, 一旦你把文件改乱了,或者误删了文件,还能够回退最近的一个 commit.
经过 log 来查看 commit ID:ssh
git log # 查看完整的 log 信息 # Or git log --pretty=oneline # # 查看简洁的 log 信息
回退的步骤:编辑器
首先,Git必须知道当前版本是哪一个版本,在Git中,用HEAD表示当前版本, 上一个版本就是HEAD^,上上一个版本就是HEAD^^,固然往上100个版本写100个^比较容易数不过来,因此写成HEAD~100。ide
git reset
指令. EG:fetch
git reset --hard HEAD^ # Or $ git reset --hard [commit ID]
NOTE: 回退 “回退” 的方法
只要上面的命令行窗口尚未被关掉,你就能够顺着往上找到那个但愿回退 “回退” 的commit id
那么忘记了 commit 怎么办 ? 还可使用 git reflog 指令
git reflog
若是每次在工做区中对文件的修改,不 add 到暂存区,那就不会被提交到 commit 中.
因此当咱们 git add 了一个文件后, 发现还须要继续对文件进行修改时, 先别着急提交第一次修改,再次 git add 第二次修改以后 git commit,就至关于把两次修改合并后一块提交了.
第一次修改 ⇒ git add ⇒ 第二次修改 ⇒ git add ⇒ git commit
git checkout -- filename
手动的把 filename 文件中的修改撤销掉. git checkout -- filename
命令中的 – 很重要,没有 –,就变成了“切换到另外一个分支”.把 filename 文件在工做区的修改所有撤销,这里有两种状况:
1. filename 文件自修改后尚未被 add 到暂存区,如今执行 git checkout -- filename
就可以撤销修改, 从而让文件回到和版本库中所记录的同样;
2. filename 已经 add 到了暂存区后,又对文件做了修改,如今执行撤销修改的话, filename 文件就回到 add 到暂存区后的状态(即仍会保留暂存区中的内容)。
NOTE: 针对第二种状况, 咱们还能够在 commit 以前, 用命令 git reset HEAD filename
把暂存区的内容进行撤销,让 filename 文件从新放回工做区的状态. git reset命令既能够回退版本,也能够把暂存区的修改回退到工做区。
git checkout -- filename
。 git reset HEAD file
,就回到了场景1,再git checkout -- filename
. git reset --hard [commit ID]