Git常用命令

常用 Git 命令清单
Git 常用命令详解(二)
Git 常用命令速查表(三)

git clone 收取项目历史的所有数据(每一个文件的每一个版本),凡是服务器上有的数据,克隆之后本地也都有了。
其中包含一个.git的目录,用于保存下载下来的所有版本记录。然后从中取出项目最新版本的所有文件拷贝放在与
.git并列的文件夹下




git init 对现有的某个项目开始用Git管理
表示在当前目录(文件夹)下创建了一个.git的隐藏目录,这个就是所谓的Git本地仓库,所有 Git 需要的数据和资源都存放在这个目录中。
git初始化之后,当前文件夹称之为work tree(工作树)。
 


git add . 将当前目录下的所有文件纳入版本控制
将工作树中增加或修改的一些文档生成快照存至Git本地仓库的一个暂存区stage中(
称该区域为索引index
,并且变成Git本地仓库能够识别的数据格式。
add 与后面的”.”是有一个空格的,这个”.”表示所有的文档。如果只生成一个文档,则将”.”改为“相对路径/文档名”即可。
git add examples/ex_ssdata.cpp 
新增加的文件是“Untracked files”,处于未跟踪状态;未跟踪的文件意味着Git在之前的快照(提交)中没有这些文件。
Git 不会自动将之纳入跟踪范围,除非你使用“git add”明明白白地告诉它“我需要跟踪该文件”。
 

 
git status 检查当前文件状态
     工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新(unmodified),已修改(modified)或者已放入暂存区。而所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。
一般有以下几种状态:
  1. Untracked files:新创建的文件,还没有执行git add
  2. Changes not staged for commit:已跟踪的(或者曾经git add过的)文件修改之后,还没有执行git add进行暂存
  3. Changes to be committed:已经执行过git add,已暂存,下次将要被一起提交的文件


 
git diff                     查看修改之后还没有暂存起来的文件和暂存区域快照之间的差异
git diff --cached     查看已经暂存起来的文件和上次提交时的快照之间的差异
git log #可以查看每次commit的改变
git diff #可以查看最近一次改变的內容,加上参数可以看其它的改变并互相比较
git show #可以看某次的变更
 


git commit 将暂存区域的文件一起提交,完成纳入操作
git add操作相当于把纸放入打印机;git commit相当于纸放进去之后要把门推进去合上,这样打印机才能工作!
每次准备提交前,都必须先用git status看看哪些修改过的或新建的文件还没有git add过,否则提交的时候不会记录这些还没暂存起来的变化!!
git commit -m "版本更新信息说明"

# 也可以将git add与git commit用一个指令完成
# git commit加上-a选项,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤。 git commit -a -m "msg"
 
git commit -am "add ex_ssdata.cpp"
将快照/索引中的内容提交到Git本地版本库中。Git的每次更新都需要提交一次。


 
.gitignore 文档忽略
在本地Git仓库的根目录创建一个名为.gitignore的文件,将工作树中你不希望接受Git管理的文档的文件模式写到.gitignore 文件中。
通常都是些IDE配置文件或者自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。
vim .gitignore
# Atom
.clang_complete
.atom*.json
.atom*.cson
 

 
git rm  从工作目录中删除指定的文件,同时从已跟踪文件清单中移除(确切地说,是从暂存区域移除)。
删除之后,必须执行 git commit,将删除该文件的操作提交上去。
 
单纯用ubuntu命令rm来删除文件的话,仅仅是删除了物理文件,并没有将其从 git 的记录中剔除。
对于用 rm 命令直接删除的文件,也可以再通过 git rm 命令重新将该文件从 git 的记录中删除掉,不能通过git add剔除。
因为git add . 仅能记录添加、改动的动作,删除的动作需靠 git rm 来完成。
  1. 即通过:rm + git rm + git commit  -m "abc"的方式记录删除动作!
  2. 还可以通过:rm + git commit  -am "abc"的方式记录删除动作!
 
git rm --cached 把文件从Git仓库中删除(亦即从暂存区域移除),但仍然保留在当前工作目录中。移除跟踪但不删除文件。
比如一些大型日志文件或者一堆.a编译文件以及编译配置文件等,这些文件是必要的,所以要移除跟踪但不删除文件。
移除之后,一定要在.gitignore 文件中补上这些文件条目。

git rm log/\*.log
git rm \*~    
加反斜杠\表示递归删除指定目录及其子目录中所有匹配的文件
 
git checkout -- test.txt 把误删的文件test.txt用版本库里的文件恢复到最新版本
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。


 
git mv file_from file_to  在Git中重命名某个文件
仓库中存储的元数据并不会体现出这是一次改名操作,即不需要通过git add来进行暂存!


 
git log 不加任何参数,会按提交时间列出所有的更新,最近的更新排在最上面。

     -p 按补丁格式显示每个更新之间的差异。
    --stat 显示每次更新的文件修改统计信息。
    --shortstat 只显示 --stat 中最后的行数修改添加移除统计。
    --name-only 仅在提交信息后显示已修改的文件清单。
    --name-status 显示新增、修改、删除的文件清单。
    --abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
    --relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
    --graph 显示 ASCII 图形表示的分支合并历史。
    --pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。

     -(n) 仅显示最近的 n 条提交
    --since, --after 仅显示指定时间之后的提交。
    --until, --before 仅显示指定时间之前的提交。
    --author 仅显示指定作者相关的提交。
    --committer 仅显示指定提交者相关的提交。



撤销操作:
git commit --amend                            

修改最后一次提交

git reset HEAD benchmarks.rb    取消已经暂存的文件
git checkout -- benchmarks.rb  取消对文件的修改
这条命令有些危险,所有对文件的修改都没有了,因为该操作是把之前版本的文件复制过来重写了此文件。
 


远程仓库操作:
git remote            查看当前配置有哪些远程仓库
git remote add origin git@github.com:fuleying/git-download.git  为远程仓库增加一个别名
git remote -v  --verbose的简写,显示远程仓库对应的克隆地址
git remote show [remote-name]      查看某个远程仓库的详细信息
git remote rename  from  to                     命令修改某个远程仓库在本地的简称
git remote rm 
[remote-name]          移除远端仓库的别名


 

分支:分支全部都是本地分支。当你在使用分支及合并的时候,一切都是在你自己的Git仓库中进行的,完全不涉及与服务器的交互。

1.新建分支(名为local),仅仅是建立了一个新的分支,但不会自动切换到这个分支中去。
git branch local 从当前分支(默认HEAD处)分化出一个新的分支
git checkout -b local
从当前分支(默认HEAD处)分化出一个新的分支并切换到该分支
git branch local [远程名/分支名] 从指定分支处分化出一个新的分支
git checkout -b local [
远程名/分支名
从指定分支处分化出一个新的分支并切换到该分支

2.查看存在多少分支[-a也显示远程仓库分支]

$ git branch [-a]
    local
    * master  *字符表示当前所在的分支

git branch -r
查看远程分支remote,用 (远程仓库名)/(分支名) 的形式表示远程分支。

远程分支(remote branch)是对远程仓库中的分支的索引。一次Git clone,会自动为你将此远程仓库命名为origin,并下载其中所有的数据,建立一个指向它的master分支的指针,在本地命名为origin/master,但你无法在本地更改其数据。
接着,Git建立一个属于你自己的本地master分支,始于origin上 master分支相同的位置,你可以就此开始工作。

可以运行git fetch origin来同步远程服务器上的数据到本地。该命令首先找到origin是哪个服务器,然后从上面获取你尚未拥有的数据,更新你本地的数据库,然后把origin/master的指针移到它最新的位置上。

git branch -v
查看各个分支最后一个提交对象的信息verbose
git branch --merge 查看哪些分支已被并入当前分支。
列表中没有*的分支通常都可以用git branch -d来删掉,因为已经把它们所包含的工作整合到了其他分支,删掉也不会损失什么。
git branch --no-merged 查看尚未合并的分支
 

3.切换到分支/主文件夹

$ git checkout local

 

4.分支的合并

$ git checkout master # 将当前分支切换为master
$ git merge local # 将local分支合并当前分支master上

第一种合并情况:如果顺着一个分支走下去可以到达另一个分支的话,那么Git在合并两者时,只会简单地把指针右移,称为快进(Fast forward)。
第二种合并情况:
如果是两个分叉的分支进行合并,Git会用两个分支的末端(C4和C5)以及它们的共同祖先(C2)进行一次简单的三方合并计算。Git没有简单地把分支指针右移,而是对三方合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象(C6)(见图 3-17)。这个提交对象比较特殊,它有两个祖先(C4 和 C5)。

第三种合并情况:
如果在不同的分支中都修改了同一个文件的同一部分,Git就无法干净地把两者合到一起。Git作了合并,但没有提交,它会停下来等你解决冲突。要看看哪些文件在合并时发生冲突,可以git status查阅。任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。

 

5.分支衍合:把在一个分支里提交的改变移到另一个分支里重放一遍。

$ git rebase
虽然会跟merge合并操作得到的结果没有任何区别,但衍合能产生一个更为整洁的提交历史,仿佛所有修改都是在一根线上先后进行的。

6.删除分支,一般是合并之后将重复的分支删除

$ git branch -d local


 
git pull:从远端仓库取回版本更新
  • pull指令其实包含了fetch(將变更复制回來)以及merge(合并)操作两个步骤!
  • git push:可将本地版本更新推送到远端仓库中。
    # 将github(远程)的git档案与本地的同步(即更新本地端的repo)
    push命令只能将代码push到你自己的分支上。

 

push 提交(这里提交的方式是使用http的方式,也有ssh的提交方法,这里面就不做介绍了)

git remote add origin https://github.com/username/Hello-World.git  

(其中的https://github.com/username/Hello-World.git,是该项目的http,这可以在网页上得到,复制过来即可)

之后会要求输入用户名和密码

提交的命令是:

git push origin master

posted on 2016-03-27 16:24  fuleying  阅读(479)  评论(0编辑  收藏  举报