使用Git的版本控制

在你开始之前

以下资源包含有关版本控制系统的有用信息:

Git纸条

来源

Git欺骗表,(c)2011,Salesforce.com,Inc.,网址:https://na1.salesforce.com/help/doc/en/salesforce_git_developer_欺骗表.pdf

概述

当您第一次设置Git时,请设置您的用户名和电子邮件地址,以便您的第一次提交将正确记录它们:

git config --global user.name "My Name"
git config --global user.email "user@email.com"

基本Git工作流示例

初始化一个新的git存储库,然后将目录中的所有文件置于阶段,最后提交初始快照::

$ git init
$ git add .
$ git commit -m 'initial commit'

创建一个名为feature_a的新分支,将其签出,使其成为活动分支,然后编辑并暂存一些文件,最后提交新快照:

$ git branch feature_A
$ git checkout feature_A
$ (edit files)
$ git add (files)
$ git commit -m 'add feature A'

切换回主分支,恢复您刚才所做的更改,然后编辑一些文件并直接在主分支上下文中提交新的更改。::

$ git checkout master
$ (edit files)
$ git commit -a -m 'change files'

将特性“A”更改合并到主分支上下文中,并结合您的所有工作。最后删除功能“分支”。::

$ git merge feature_A
$ git branch -d feature_A

设置初始化(&I)

Git配置和存储库初始化和克隆。

命令

描述

git config [key] [value]

在此存储库中设置配置值

git config global [key] [value]

为此用户全局设置配置值

git init

将现有目录初始化为Git存储库

git clone [url]

从URL克隆Git存储库

git help [command]

获取有关任何git命令的帮助

阶段和快照

使用快照和Git临时区域。

命令

描述

git status

显示为下一次提交准备的内容以及在工作目录中修改的内容的状态

git add [file]

按现在的样子添加一个文件到下一个提交(阶段)

git reset [file]

重置文件的临时区域,使更改不在下一次提交中(取消暂存)

git diff

已更改但未分级的内容的差异

git diff --staged

阶段性但尚未提交的内容的差异

git commit

将分段内容作为新的提交快照提交

git rm [file]

从工作目录中删除一个文件,然后取消对其的存储

合并功能

与Git分支和Stash合作。

命令

描述

git branch

列出你的分支。A*将出现在当前活动分支的旁边。

git branch [branch-name]

在当前提交时新建分支

git checkout [branch]

切换到另一个分支并将其签入您的工作目录

git checkout -b [branch]

创建一个分支并立即切换到它

git merge [branch]

将另一个分支合并到当前活动的分支中,并将合并记录为提交

git log

显示提交日志

git stash

暂时将当前未提交的修改存储在工作目录中

git stash apply

重新应用上次隐藏的更改

共享和更新

从另一个存储库获取、合并和使用更新。

命令

描述

git remote add [alias] [url]

添加Git URL作为别名

git fetch [alias]

从那个git远程取下所有的分支

git merge [alias]/[branch]

将服务器上的分支合并到当前活动的分支中以使其更新

git push [alias] [branch]

推动分支上的工作以更新远程Git存储库上的分支

git pull

从当前分支跟踪的URL中提取,然后立即尝试合并到跟踪的分支中。

检查和比较

正在检查日志、差异和对象信息。

命令

描述

git log

显示当前活动分支的提交历史记录

git log branchB..branchA

显示不在BranchB上的BranchA上的提交

git log --follow [file]

显示已更改文件的提交,即使在重命名之间也是如此

git diff branchB...branchA

显示分支A中不在分支B中的内容的差异

git show [SHA]

以可读格式显示Git中的任何对象

在Github上捐款

要为GitHub(或其他存储库宿主网站,如BitBucket)上托管的项目提供帮助,您可以在线分叉项目,然后在本地克隆分叉,进行更改,将其推回到GitHub,然后发送拉取请求,该请求将通过电子邮件发送给维护者。::

fork project on github
$ git clone https://github.com/my-user/project
$ cd project
$ (edit files)
$ git add (files)
$ git commit -m 'Explain what I changed'
$ git push origin master
go to github and click ‘pull request’ button

可视Git作弊表

来源

Git作弊表,(c)2009-2012,Andrew Peterson网址:http://ndpsoftware.com/git-craitsheet.html

git命令的列表,根据它们的影响进行分类。

交互式联机版本提供了每个命令的描述。

藏匿处

隐藏对工作区所做修改的位置,同时处理其他内容。(在“正常”工作流中不需要Stash区域。)

Git commands that affect the stash

工作空间

当地工作区。

Git commands that affect the workspace

集结区

“index”(索引)或“staging area”(临时区域)保存工作区域内容的快照,而此快照将作为下一次提交的内容。

commands that affect the staging area

本地存储库

受版本控制的本地区域。典型分支:master、dev(本地开发)、feature_x、bugfix_y

commands that affect the local repository

上游储存库

通常是受版本控制的远程区域。默认名称为“origin”。这里的典型分支:master,shared_feature_x,release_y。

commands that affect the upstream repository

如何。。。

本节包括执行不同操作的其他git命令。

设置合并工具以解决冲突

将kdiff3配置为合并工具(在Windows中)::

$ git config --global mergetool.kdiff3.path 'C:\Program Files (x86)\KDiff3\kdiff3.exe'
$ git config --global merge.tool kdiff3

调用kdiff3::

$  git mergetool <file>

从上游存储库强制更新

此操作将放弃本地存储库中的所有更改::

$ git reset --hard HEAD
$ git pull

将未跟踪的文件添加到受版本控制的文件集

可以使用图案。例如,这将添加任何新的或未跟踪的 *.rst 文件::

$ git add $(git ls-files --other *.rst)

从受版本控制的文件集中删除多个文件

这将删除已从磁盘中删除的多个文件::

$ git rm $(git ls-files --deleted)

或者,编辑 .git\config 文件,并添加以下行:

[alias]
   rma = !git ls-files --deleted -z | xargs -0 git rm

然后使用别名运行命令:

$git rma

禁用带引号的文件名

文件名中的特殊字符和空格可能有问题。要禁用引号文件名(Windows Unicode支持),请使用:

$  git config [--global] core.quotepath off