Git 经常使用命令速查表(三)
git clone 收取项目历史的全部数据(每个文件的每个版本),凡是服务器上有的数据,克隆以后本地也都有了。
其中包含一个.git
的目录,用于保存下载下来的全部版本记录。而后从中取出项目最新版本的全部文件拷贝放在与
.git并列的文件夹下
。
git init 对现有的某个项目开始用Git管理
表示在当前目录(文件夹)下建立了一个.git的隐藏目录,这个就是所谓的Git本地仓库,全部 Git 须要的数据和资源都存放在这个目录中。
将工做树中增长或修改的一些文档 生成快照存至Git本地仓库的一个暂存区stage中(
git add . 将当前目录下的全部文件归入版本控制
称该区域为索引index),而且变成Git本地仓库可以识别的数据格式。
Untracked files:新建立的文件,尚未执行git add
Changes not staged for commit:已跟踪的(或者曾经git add过的)文件修改以后,尚未执行git add进行暂存
Changes to be committed:已经执行过git add,已暂存,下次将要被一块儿提交的文件
git commit 将暂存区域的文件一块儿提交,完成归入操做
git add操做至关于把纸放入打印机;git commit至关于纸放进去以后要把门推动去合上,这样打印机才能工做!
每次准备提交前,都必须先用git status看看哪些
修改过的或新建的文件尚未git add
过,不然提交的时候不会记录这些还没暂存起来的变化!!git commit -m "版本更新信息说明"
git status看看哪些git add
# 也能够将git add与git commit用一个指令完成# git commit
加上-a
选项,Git就会自动把全部已经跟踪过的文件暂存起来一并提交,从而跳过git add
步骤。 git commit -a -m "msg"# git commit-agit add
git commit -am "add ex_ssdata.cpp"
将快照/索引中的内容提交到Git本地版本库中。Git的每次更新都须要提交一次。
在本地Git仓库的根目录建立一个名为vim .gitignore.gitignore
的文件,将工做树中你不但愿接受Git管理的文档的文件模式写到.gitignore 文件中。
一般都是些IDE配置文件或者自动生成的文件,好比日志文件,或者编译过程当中建立的临时文件等。
.gitignore
git commit
,将删除该文件的操做提交上去。
rm
来删除文件的话,仅仅是删除了物理文件,并无将其从 git 的记录中剔除。
rm
命令直接删除的文件,也能够再经过
git rm
命令从新将该文件从 git 的记录中删除掉,不能经过git add剔除。
由于git add .
仅能记录添加、改动的动做,删除的动做需靠
git rm
来完成。
好比一些大型日志文件或者一堆编译文件以及编译配置文件等,这些文件是必要的,因此要移除跟踪但不删除文件。
移除以后,必定要在 文件中补上这些文件条目。git rm --cached 把文件从Git仓库中删除(亦即从暂存区域移除),但仍然保留在当前工做目录中。移除跟踪但不删除文件。
.a.gitignore
git rm log/\*.log
git rm \*~
加反斜杠\表示递归删除指定目录及其子目录中全部匹配的文件
\表示递归删除指定目录及其子目录中全部匹配的文件
git checkout -- test.txt 把误删的文件test.txt用版本库里的文件恢复到最新版本
实际上是用版本库里的版本替换工做区的版本,不管工做区是修改仍是删除,均可以“一键还原”。
若是一个文件已经被提交到版本库,那么你永远不用担忧误删,可是你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。git checkout -- test.txt 把误删的文件test.txt用版本库里的文件恢复到最新版本
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 -v--verbose
的简写,显示远程仓库对应的克隆地址git remote show [remote-name]
查看某个远程仓库的详细信息
--verbosegit remote show [remote-name]
git remote rename
from to 命令修改某个远程仓库
在本地的简称
[remote-name] 移除远端仓库的别名
从当前分支(默认HEAD处)分化出一个新的分支并切换到该分支git branch local 从当前分支(默认HEAD处)分化出一个新的分支git checkout -b local
git checkout -b local
git branch local [远程名/分支名] 从指定分支处分化出一个新的分支
git branch local [远程名/分支名] 从指定分支处分化出一个新的分支git checkout -b local [
git checkout -b local [
git checkout -b local [
远程名/分支名
远程名/分支名
远程名/分支名
远程名/分支名
远程名/分支名
]
从指定分支处分化出一个新的分支
并切换到该分支
$ git branch [-a] local * master 字符表示当前所在的分支*
查看远程分支remote,用 的形式表示远程分支。
远程分支(remote branch)是对远程仓库中的分支的索引。一次Git clone,会自动为你将此远程仓库命名为,并下载其中全部的数据,创建一个指向它的分支的指针,在本地命名为,但你没法在本地更改其数据。
接着,Git创建一个属于你本身的本地分支,始于上 分支相同的位置,你能够就此开始工做。
能够运行来同步远程服务器上的数据到本地。该命令首先找到是哪一个服务器,而后从上面获取你还没有拥有的数据,更新你本地的数据库,而后把的指针移到它最新的位置上。
git branch -v 查看各个分支最后一个提交对象的信息verbose
查看哪些分支已被并入当前分支。
列表中没有的分支一般均可以用来删掉,由于已经把它们所包含的工做整合到了其余分支,删掉也不会损失什么。
git branch -r
git branch -r (远程仓库名)/(分支名)originmasterorigin/mastermasteroriginmaster
git fetch originoriginorigin/mastergit branch --merge*git branch -d
git branch --no-merged
查看还没有合并的分支
$ git checkout local
$ 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)的状态列出。
$ git rebase
虽然会跟merge合并操做获得的结果没有任何区别,但衍合能产生一个更为整洁的提交历史,仿佛全部修改都是在一根线上前后进行的。
$ git branch -d local
pull指令其实包含了fetch(將变动复制回來)以及merge(合并)操做两个步骤!
# 将github(远程)的git档案与本地的同步(即更新本地端的repo)push命令只能将代码push到你本身的分支上。
push 提交(这里提交的方式是使用http的方式,也有ssh的提交方法,这里面就不作介绍了)html
git remote add origin https://github.com/username/Hello-World.git git
(其中的https://github.com/username/Hello-World.git,是该项目的http,这能够在网页上获得,复制过来便可)github
以后会要求输入用户名和密码数据库
提交的命令是:json
git push origin masterubuntu