1.git的相关配置
git自带一个git config工具来帮忙配置变量,git中这些变量存储在3个不同的位置并且有相关命令进行配置,如下:
git config --system
:存储在/etc/gitconfig
中,系统中每个用户都会读取该文件中的变量。git config --global
:存储在~/.gitconfig
或~/.config/git/config
中,只针对当前用户。git config --local
:存储在当前仓库的git目录中的config文件(即.git/config
)。
注意:每个级别会覆盖上一个级别的配置。
git config使用例子:git config --global user.name “John Doe”。
查看所有的配置以及它们所在的文件:
git config --list --show-origin
检查配置信息:
git config --list
:列出所有 Git 当时能找到的配置。
来检查 Git 的某一项配置:
git config <key>
:例子 git config user.name。
2.获取git仓库
- 获取方式一:在已存在目录中初始化仓库。
步骤一:
cd 指定目录
。
步骤二:执行git init
。
- 获取方式二:克隆现有的仓库。
git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或其它名字的默认分支)
方案一:
git clone https://github.com/libgit2/libgit2
(在本地创建名为libgit2的目录)。
方案二:git clone https://github.com/libgit2/libgit2 mylibgit
(在本地创建名为mylibgit的目录)。
3.记录每次更新到仓库命令
git status
:查看哪些文件处于什么状态。
git status -s
命令或git status --short
:简短输出git status
的内容。
-
git add 文件/目录
:
作用一:开始跟踪一个文件。
作用二:把已跟踪的文件(已跟踪但是修改了的文件)放到暂存区。
作用三:还能用于合并时把有冲突的文件标记为已解决状态。 -
.gitignore
文件(非命令):此文件可以列出无需git管理的文件。 -
git diff
:显示哪些行发生了改变,尚未暂存的文件更新了哪些部分。
git diff --staged
或git diff --cached
:若要查看已暂存的将要添加到下次提交里的内容。
git commit
:提交更新并且启动自己选择的文本编辑器来输入提交说明(git config --global core.editor 编辑器名字)。
git commit -m "说明文字"
:将提交信息与命令放在同一行。
git commit -a
:跳过使用暂存区域。
git commit --amend -m <message>
:使用一次新的commit,替代上一次提交。
git commit <file1> -m <message>
:提交暂存区的指定文件到本地仓库。
git rm 文件名
:从git中移除文件(直接物理删除 rm 文件并不会从git管辖中删除)。
git rm -f 文件名
:强制删除当前文件(当前文件已暂存或修改过的情形)。
git rm --cached 文件名
:从git仓库中删除但文件仍保留在磁盘中。
注意:文件名也可使用正则表达式。
git mv file_from file_to
:移动文件file_from到file_to。
也可用于改名操作,例如
git mv README.md README
相当于如下三条指令的作用结果:
mv README.md README
git rm README.md
git add README
注意:在使用其他工具重命名文件时,记得在提交前 git rm 删除旧文件名,再 git add 添加新文件名。
4.查看提交历史
-
git log
:不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。 -
git log --patch
或git log -p
:显示每次提交所引入的差异(按 补丁 的格式输出)。 -
git log -n
:限制日至条目的数量,例如git log -2
只显示最近两次的提交。 -
git log --stat
:查看每次提交的简略统计信息,例如在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。 -
git log --pretty=[选项]
:使用不同于默认格式的方式展示提交历史。
例如:
git log --pretty=oneline
:将每个提示放在一行展示。git log --pretty=format:[自定义格式]
:定制记录的显示格式。
例如:
git log --pretty=format:"%h - %an, %ar : %s"
表示的输出格式为:
简写哈希值 - 作者名字,作者修订日期,按多久以前的方式显示: 提交说明
更多关于git log请参考:git log
5.撤销操作
-
git commit --amend
:撤销操作,这个命令会将暂存区中的文件提交。
修复旧的提交(完全用一个 新的提交 替换旧的提交,旧有的提交从未存在过一样,它并不会出现在仓库的历史中)。
例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:$ git commit -m ‘initial commit’
$ git add forgotten_file
$ git commit --amend最终你只会有一个提交——第二次提交将代替第一次提交的结果。
-
git reset HEAD 文件
:取消暂存的文件。(被取消暂存的文件仍然是修改后的文件,只是没有暂存而以)。 -
git checkout -- 文件名
:撤销对文件的修改(对该文件的任何修改都撤销,恢复到或者刚克隆完的样子,或者刚把它放入工作目录时的样子)。 -
git reset [--soft | --mixed | --hard] [HEAD]
:git reset 命令用于回退版本,可以指定退回某一次提交的版本。
HEAD说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
以此类推……
也可以用数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD~2 上上一个版本
HEAD~3 上上上一个版本
以此类推……
git reset --mixed [HEAD]
:--mixed
为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
原节点和Reset节点之间的所有差异都会放到工作目录中。
例子:
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本
git reset --soft [HEAD]
:--soft
参数用于回退到某个版本。
暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
例子:
$ git reset --soft HEAD~3 # 回退上上上一个版本
git reset --hard [HEAD]
:--hard
参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。
例子:
$ git reset --hard HEAD~3 # 回退上上上一个版本
$ git reset --hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
6.远程仓库的使用
- 查看远程仓库:
git remote
:列出你指定的每一个远程服务器的简写。 如果你已经克隆了自己的仓库,那么至少应该能看到 origin ——这是 Git 给你克隆的仓库服务器的默认名字。
git remote -v
:显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。
- 添加远程仓库:
git remote add <shortname> <url>
:添加一个新的远程 Git 仓库,同时指定一个方便使用的简写shortname。
例子:
git remote add pb https://github.com/paulboone/ticgit
现在你可以在命令行中使用字符串pb
来代替整个 URL。 例如,如果你想拉取 Paul 的仓库中有但你没有的信息,可以运行git fetch pb
。
现在 Paul 的 master 分支可以在本地通过pb/master
访问到
- 从远程仓库中抓取与拉取:
git fetch <remote>
:访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
- 推送到远程仓库:
git push <remote> <branch>
:分享项目,将其推送到上游。
例子:将 master 分支推送到 origin 服务器(再次说明,克隆时通常会自动帮你设置好那两个名字):
$ git push origin master
注意:只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。否则要先抓取再合并。
- 查看某个远程仓库:
git remote show <remote>
:remote可以使用简写名字,此命令查看远程仓库的url与跟踪分支信息。
可以看到的信息:
- 远程仓库的 URL 与跟踪分支的信息。
- 正处于 那个 分支。
- 列出了当你在特定的分支上执行 git push 会自动地推送到哪一个远程分支。
- 列出了哪些远程分支不在你的本地,哪些远程分支已经从服务器上移除了。
- 还有当你执行 git pull 时哪些本地分支可以与它跟踪的远程分支自动合并。
- 远程仓库的重命名与移除:
git remote rename 旧的仓库简写名字 新的仓库简写名字
:修改一个远程仓库的简写名。
例子:
$ git remote rename pb paul
值得注意的是这同样也会修改你所有远程跟踪的分支名字。 那些过去引用pb/master
的现在会引用paul/master
。
git remote remove 远程仓库简写名字
:移除一个远程仓库,一旦你使用这种方式删除了一个远程仓库,那么所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除。
7.打标签
像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。
-
列出标签信息和与之对应的提交信息
git show 标签名字
-
列出标签
git tag
:列出已有的所有标签。
git tag -l
或git tag --list
:按照通配符列出标签需要 -l 或 --list 选项。
例子:
git tag -l "v1.8.5*"
列出以 "v1.8.5"开头的标签。
- 创建标签:Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)。
轻量标签很像一个不会改变的分支——它只是某个特定提交的引用。
而附注标签是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。 通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。
- 创建附注标签
git tag -a 标签名字 -m "存储在标签中的信息"
:-a指定创建附注标签,-m指定存储在标签中的信息。
可以使用git show 标签名
查看标签信息和与之对应的提交信息。
- 创建轻量标签
git tag 标签名
:无需其它参数创建轻量标签。
- 后期打标签
git tag -a 版本号 校验和(或部分校验和)
:过去的提交打标签。过去提交的校验和可通过命令git log --pretty=oneline
查看。
- 共享标签
git push 远程仓库简写名字 <tagname>
:默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。
git push origin --tags
:一次性推送很多标签,将会把所有不在远程仓库服务器上的标签全部传送到那里。现在,当其他人从仓库中克隆或拉取,他们也能得到你的那些标签。
- 删除标签
git tag -d 标签名字
:删除掉你本地仓库上的标签。
git push <remote> :refs/tags/标签名字
:删除远程仓库的标签,冒号前面的空值推送到远程标签名,从而高效地删除它。
git push 远程仓库简写名字 --delete 标签名字
:删除远程标签。
- 检出标签
git checkout 版本名字
:查看某个标签所指向的文件版本,使你的仓库处于“分离头指针(detached HEAD)”的状态——这个状态有些不好的副作用:如果你做了某些更改然后提交它们,标签不会发生变化, 但你的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问。
因此,如果你需要进行更改,比如你要修复旧版本中的错误,那么通常需要创建一个新分支:git checkout -b 新分支名字 标签名字
8. git 别名
git config --global alias.别名 命令
:git别名。
例子:
$ git config --global alias.ci commit
:ci 是 commit的别名
$ git config --global alias.unstage 'reset HEAD --'
:unstage 是 'reset HEAD’的别名。
9. git获取帮助
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
$ git <verb> -h