工作区: working directory(.git的父目录,如本例test)
版本库: respository(其实就是.git隐藏目录,虽然.git在工作区目录下,但是.git不算工作区)
暂存区: staged(或者叫index,git add的东西都在这,然后git commit把暂存区的数据提交到当前分支)
关键概念理解:
HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。如果我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。
merge时如果没冲突会出现:Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
git在未进行commit操作之前,存在三种状态:
Untracked files未被加入待提交清单,可以使用git add 命令将其加入待提交清单中,通过“git rm --cached README.txt”命令,可以将文件状态还原为未暂存状态,即回到“Untracked files”文件状态。
Changes not staged for commit:表明文件已经修改,但是还没有放入暂存区域,也就是没生成快照。如果现在进行commit操作,只是将修改之前的文件快照提交到了git目录,通过使用git add更新修改的内容(注意此文件之前已经执行过git add命令,只是因为对其进行了修改所以此处说是更新,即:use "git add<file>..." to update what will be commited);use "git checkout -- <file>" to discard(放弃) changes in working directory
Changes to be committed:暂存状态(待提交状态)
初始化一个git仓库: git init
把READ.md添加到待提交清单中: git add README.md
提交READ.md: git commit -m"添加README.md文件"
查看提交记录详细信息: git log
查看提交记录: git log --pretty=oneline
回退: git reset --hard HEAD^(HEAD^回到上一个版本HEAD^^回到上上一个版本HEAD~100回到100个版本之前)
git reset --hard 3628164(回到该commit指向的HEAD)
查看所有的HEAD记录: git reflog
查看未add的修改: git diff(查看当前处于工作区(未被git add操作)的修改内容)
查看已经add但是未commit的修改: git diff --cached
查看工作区和暂存区的修改: git diff HEAD
撤销暂存区地修改: git reset HEAD README.md
撤销工作区的修改: git checkout --README.md(“--”,如果没有这个符号则代表切换分支)
删除文件: git rm test.txt
git log --graph --pretty=oneline --abbrev-commit
生成ssh密钥对: ssh-keygen -t rsa -C "youremail@example.com"
本地仓库关联git仓库: git remote add origin git@github.com:michaelliao/learngit.git
推送本地内容到远程库: git push -u origin master(由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。)
克隆一个远程项目到本地仓库: git clone git@github.com:runnerFeng/gitskills.git
查看分支: git branch
新建分支: git branch dev
切换分支: git checkout dev
新建并且切换到dev: git checkout -b dev
合并分支: git merge dev(dev分支内容合并到当前分支上)
分支合并情况查看: git log --graph --pretty=oneline --abbrev-commit
储藏当前分支: git stash(这是用于有临时bug要修复时,储藏当前分支)
查看当前储藏分支: git stash list
恢复储藏分支: git stash pop
强行销毁分支: git branch -D feature-vulcan
查看远程分支信息: git remote -v
推送master分支到远程: git push origin master
推送dev分支到远程: git push origin master
在本地创建和远程分支对应的分支: git checkout -b branch-name origin/branch-name(本地和远程分支的名称最好一致)
设置远程dev关联本地dev分支: git branch --set-upstream dev origin/dev
拉取远程分支并且合并到本地分支: git fetch(该命令等价于git fetch和git merge两个命令,git pull会自动合并,后两个命令是分开操作)
给当前分支打一个v1.0的tag: git tag v1.0(默认标签是打在当前分支最新提交的commit上的)
查看所有tag: git tag
给某个commit打tag: git tag v0.9 6224937(注意,标签不是按时间顺序列出,而是按字母排序的)
查看tag信息: git show v1.0
创建带有说明的标签: git tag -a v0.1 -m "version 0.1 released" 3628164(-a指定标签名,-m指定说明文字)
删除tag: git tag -d v1.0
推送tag: git push orgin v1.0
推送所有tag: git push orgin --tags
删除远程tag: git tag -d v0.9(先删除本地分支)
git push origin :refs/tags/v0.9(再删除远程分支)
强制添加某个文件: git add -f App.class
查看.gitignore是否有问题: git check-ignore -v App.class