12bet,要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:
$ git init
如果12bet,想对某个开源项目出一份力,可以先把该项目的 Git 仓库复制一份出来,这就需要用到git clone
命令
如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令最后指定:
$ git clone git://github.com/lingyucoder/test.git dest
工作目录下面的所有文件只有两种状态:已跟踪
或未跟踪
。已跟踪的文件被纳入版本控制管理中
要确定哪些文件当前处于什么状态,可以用 git status
命令
使用命令 git add
开始跟踪一个新文件
已跟踪文件的内容发生了变化,但还没有放到暂存区。12博体育,要暂存这次更新,需要运行 git add
命令
git add
是个多功能命令,根据目标文件的状态不同,12博体育,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等
创建一个名为 .gitignore
的文件,列出要忽略的文件模式,文件 .gitignore 的格式规范如下:
https://www.liuwanlin.info/superlin%e7%9a%84%e8%af%bb%e4%b9%a6%e7%ac%94%e8%ae%b0-52/
开头的行都会被 Git 忽略。如果要查看具体修改了什么地方,可以用 git diff
命令。若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用 git diff --cached
命令。
一定要确认还有什么修改过的或新建的文件还没有 git add
过,否则提交的时候不会记录这些还没暂存起来的变化。所以,每次准备提交前,先用 git status
看下,是不是都已暂存起来了,然后再运行提交命令 git commit
Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit
加上 -a
选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add
步骤
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。可以用 git rm
命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
要移除跟踪但不删除文件,以便稍后在 .gitignore
文件中补上,用 --cached
选项即可:
$ git rm --cached readme.txt
要在 Git 中对文件改名,可以这么做:
$ git mv file_from file_to
运行 git mv
就相当于运行了下面三条命令:
$ mv README.txt README
$ git rm README.txt
$ git add README
在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 git log
命令。
-p
选项展开显示每次提交的内容差异
用 -n
则仅显示最近的n次更新。
--stat
,仅显示简要的增改行数统计:
--pretty
选项,可以指定使用完全不同于默认格式的方式展示提交历史。比如用 oneline
将每个提交放在一行显示,这在提交数很大时非常有用。另外还有 short
,full
和 fuller
可以用
$ git log --pretty=oneline
--pretty=format
,可以定制要显示的记录格式,这样的输出便于后期编程提取分析
$ git log --pretty=format:"%h - %an, %ar : %s"
所有占位符写法及其意义:
用 oneline
或 format
时结合 --graph
选项,可以看到开头多出一些 ASCII 字符串表示的简单图形,形象地展示了每个提交所在的分支及其分化衍合情况
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
和 --until
。
用 --author
选项显示指定作者的提交,用 --grep
选项搜索提交说明中的关键字
如果要得到同时满足这两个选项搜索条件的提交,就必须用 --all-match
选项
如果只关心某些文件或者目录的历史提交,可以在 git log
选项的最后指定它们的路径。
-<n>
仅显示最近的 n 条提交--since
, --after
仅显示指定时间之后的提交。--until
, –before 仅显示指定时间之前的提交。--author
仅显示指定作者相关的提交。--committer
仅显示指定提交者相关的提交。想要撤消刚才的提交操作,可以使用 --amend
选项重新提交:
$ git commit --amend
此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,而所提交的文件快照和之前的一样。
可以使用 git reset HEAD <file>...
的方式取消暂存某些文件
$ git checkout -- someFile.js
这样someFile.js
文件就恢复到修改前的版本了。
用 git remote
命令,它会列出每个远程库的简短名字。也可以加上 -v
选项(译注:此为 --verbose
的简写,取首字母),显示对应的克隆地址
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url]
可以用下面的命令从远程仓库抓取数据到本地:
$ git fetch [remote-name]
此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。git fetch
命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支。如果设置了某个分支用于跟踪某个远端仓库的分支,可以使用 git pull
命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。
将本地仓库中的数据推送到远程仓库需要使用命令: git push [remote-name] [branch-name]
。
如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,并到自己的项目中,然后才可以再次推送
可以通过命令 git remote show [remote-name]
查看某个远程仓库的详细信息
可以用 git remote rename
命令修改某个远程仓库的简短名称
需要移除对应的远端仓库,可以运行 git remote rm
命令
列出现有标签的命令非常简单,直接运行 git tag
Git 使用的标签有两种类型:
一般我们都建议使用含附注型的标签,以便保留相关信息
创建一个含附注类型的标签非常简单,用 -a
(译注:取 annotated 的首字母)指定标签名字即可:
$ git tag -a v1.4 -m 'my version 1.4'
可以使用 git show
命令查看相应标签的版本信息,并连同显示打标签时的提交对象。
如果你有自己的私钥,还可以用 GPG 来签署标签,只需要把之前的 -a
改为 -s
(译注: 取Signed 的首字母
轻量级标签实际上就是一个保存着对应提交对象的校验和信息的文件。要创建这样的标签,一个 -a
,-s
或 -m
选项都不用,直接给出标签名字即可
可以使用 git tag -v [tag-name]
(译注:取 verify 的首字母)的方式验证已经签署的标签。此命令会调用 GPG 来验证签名,所以你需要有签署者的公钥,存放在 keyring 中,才能验证
默认情况下,git push
并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin [tagname]
即可:
如果要一次推送所有(本地新增的)标签上去,可以使用 --tags
选项
可以用 git config
为命令设置别名。来看看下面的例子:
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status