[ [ [转载] http://blog.csdn.net/techbirds_bao/article/details/9179853
Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制。.git目录位于工作目录内。 对于任何一个文件,在 Git 内都只有三种状态:已修改(modified),已暂存(staged)和已提交(committed)。
Git的三种状态:
1.Change(Unstaged):你改动了一个,没有调用任何git命令前,就是这种状态。2.Staged暂存区:调用git add或者git commit -a之后,进入Staged状态,表示申明要变动了。3.Committed:Commit,生成新的版本commit号,进入此状态。常见状态提示:
1.nothing to commit (working directory clean): 所有已跟踪文件在上次提交后都未被更改过2.Untracked files: 未跟踪文件3.Changes to be committed: 已跟踪文件(在添加add命令之后的文件与修改后又添加add命令之后的文件)4.Changes not staged for commit:已跟踪文件的内容发生了变化,但还没有放到暂存区,这样状态的文件即使Commit上去也只是Commit暂存区的版本而不是改文件最新版本若编辑修改已暂存的文件,后运行git status会出现暂存前后的两个版本(Change和Staged),若此时Commit,则只会同步已暂存(Staged)的那个版本,而不会同步暂存后修改的部分。若要同步暂存后修改的部分,应重新add该文件。
提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。
在 Git 中,HEAD是一个指向你正在工作中的本地分支的指针(将 HEAD 想象为当前分支的别名。)
任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。可以使用git mergetool使用图形工具引导合并解决冲突。
[举例] 1)、 为PD-based-on-pc项目新建一个远程origin仓库
$ git remote add origin git@git.coding.net:Yunpentium/PD-based-on-pc.git2)、 把本地master分支的内容推送到远程的origin仓库
$ git push origin master[举例] 我从本地master分支创建了一个本地issue5560分支,做了一些修改后,使用git push origin master提交,但是显示的结果却是’Everything up-to-date’。发生问题的原因是git push origin master中,本地master分支默认指向了远程的origin/master 分支,所以这里要使用git push origin issue5560:master 就可以指明是把本地的issue5560推送到远程的origin/master分支了。
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。
$ git push origin test:master // 提交本地test分支作为远程的master分支 $ git push origin test:test // 提交本地test分支作为远程的test分支如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。
$ git push origin :test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心Git 使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)
查看版本:$ git tag创建版本:$ git tag [name]删除版本:$ git tag -d [name]查看远程版本:$ git tag -r创建远程版本(本地版本push到远程):$ git push origin [name]删除远程版本:$ git push origin :refs/tags/[name][举例]
$git tag -a v1.4 -m 'my version 1.4' //新建一个含附注(-a)的标签$git tag v1.5#新建一个轻量级标签$git show v1.1 #查看相应标签的版本信息如:$ git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
初始化子模块:$ git submodule init ----只在首次检出仓库时运行一次就行更新子模块:$ git submodule update ----每次更新或切换分支后都需要运行一下删除子模块:(分4步走哦)1)$ git rm --cached [path] 2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉 3) 编辑“.git/config”文件,将子模块的相关配置节点删除掉 4) 手动删除子模块残留的目录 5)忽略一些文件、文件夹不提交在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如targetbin*.db运行了 git add 之后又修改了本地文件,需要重新运行 git add 把最新版本重新暂存起来。
add添加到暂存区的文件,git才会监控它的变化。在Unstaged状态的文件变化并不会在命令行中体现出来。
$ git add octocat.txt //把文件从change->staged状态(修改现有文件也要git add来修改状态)$ git add /home/root/aaa/*#(当前目录下所有的更新)$ git reset HEAD gitTest.txt #取消已add到暂存区的文件(与add执行相反的操作)usage: git clone [options] [–] [
参数挺多,但常用的就几个:
1)、最简单直接的命令
git clone xxx.git2)、 如果想clone到指定目录
git clone xxx.git "指定目录"3)、 clone时创建新的分支替代默认Origin HEAD(master)
git clone -b [new_branch_name] xxx.git4)、 clone 远程分支
git clone 命令默认的只会建立master分支,如果你想clone指定的某一远程分支(如:dev)的话,可以如下:
A. 查看所有分支(包括隐藏的) git branch -a 显示所有分支,如:
master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/masterB. 在本地新建同名的(“dev”)分支,并切换到该分支
git checkout -t origin/dev 该命令等同于:git checkout -b dev origin/dev如果已暂存了所有修改过的文件,后运行git diff会什么都没有(因为该命令显示的是当前文件与暂存文件之间的差异)
$git diff//查看文件被修改之后还没有暂存起来的变化内容,显示的是与上次暂存文件的差异$git diff test //显示当前目录和另一个叫'test'分支的差别$git diff --cached //查看已经暂存起来的文件和上次提交时的快照之间的差异$git diff --staged //同上新闻热点
疑难解答