-
Notifications
You must be signed in to change notification settings - Fork 0
分布式的版本控制工具。
git config --global user.name 'Your Name'
git config --global user.email '[email protected]'
下面命令用来配置不带参数的 git push
的行为:
git config --global push.default upstream
关于这部分的讨论可以参考这里。
Windows 下,如果项目是跨平台的,建议:
git config --global core.autocrlf true
这将使文本文件换行符在仓库里存为 LF,检出到工作目录后自动转换为 CRLF。 如果项目只在 Windows 下可用,那么可以
git config --global core.autocrlf false
禁用换行符的自动转换。
Linux 下建议:
git config --global core.autocrlf input
这使得文件换行符只在进仓库时做 CRLF 到 LF 的转换。
可以给命令起别名(alias)以减少拼写量,例如:
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.st status
则配置后 git ci
就等同于 git commit
,以此类推。
如果终端支持色彩,可以用下面命令使得一些命令(如 git diff
)的输出自动着色:
git config --global color.ui auto
Git 是分布式的版本控制工具,许多事情都是在本地(或曰离线状态)完成。
如果已经有一个远程仓库,可以以 git clone
开始,这会在当前目录下
建立仓库对应的目录。
如果直接从本地开始,则先建立项目目录,在项目顶层目录使用命令
git init
初始化新项目。这会在顶层目录下建立文件夹 .git/
。
本地工作的基本流程是:
- 编辑文件、写代码等。
-
git add filename
将新建的文件或修改了的文件 add 到 index 区域,准备提交。注意修改了的文件也需要 git add。 -
git commit
将 index 区域的内容提交到仓库(repo)。 - 回到第一步。
注:可以使用 git commit -a
,以自动地把已经入库了的目录中修改了的文件 add 到 index 区域,并做提交。
git commit
时,会打开默认的文本编辑器,要求你输入提交信息。
提交信息的格式一般是第一行是简要的更改说明,之后空一行,再之后写具体
内容(这里格式就无所谓了。不过如果有多条消息需要说明推荐用*
做列表)。
当你没有设置默认文本编辑器时,会打开 vi。其基本操作是:
- 初始在正常模式,按 i (小写,即按 I 键)进入插入模式,写文本;
- 写完后按 Esc 回到正常模式,输入
:wq
(依次按<Shift-;>
w q,会在末行显示)保存更改并退出编辑器。
注:更多关于 Vi/Vim 的介绍参见 Vim。
在本地操作时,可以随时查看目前的状态,命令是
git status
查看文件具体的修改内容,使用
git diff
查看历次提交信息,使用
git log
便捷轻量的分支操作是 Git 的一大特性。
我们的工作默认在 master 分支上进行。一般情况下,我们 master 分支存放主干代码(比较稳定),实验性的更改可以先新建分支。如下以当前工作为基础新建 devel 分支, 并切换过去:
git checkout -b devel
一般地,在分支间切换:
git checkout 分支名
git branch
命令可以列出各个(本地)分支,当前分支前面会有一个 *
号指示。git branch -r
则会列出所有远程分支,
git branch -a
会列出所有分支。
每个分支上的操作都是 “编辑 --- add --- commit” 三部曲。只有 commit 到仓库才算保存了工作成果。
当你觉得目前 devel 分支上的工作成果足够稳定,可以加入主干时,就先切换回 master 分支:
git checkout master
然后在 master 分支上执行:
git merge devel
这样就把 devel 分支上的更改合并到了 master 分支上。
merge 时如果没有冲突,会自动产生新的提交(可以用 git log
查看)。如果有冲突,需要手工解决冲突,再手动提交。Git 会在命令行提示有冲突的文件名,而且会在含有冲突的文件中加入类似下面的标记
<<<<<<< HEAD
HEAD version of code
#########
OTHER version of code
>>>>>>> OTHER
手工解决冲突一般就是自己裁定选取哪个版本,或者其他整合方式。
可以手动逐个打开有冲突的文件,手工解决冲突。复杂的情形可以借助于 git mergetool
调用外部合并工具,如 vimdiff 等。
修改后记得把 <<<, ###, >>>
等标记删除。手动解决所有冲突之后,使用 git add
将修改加入 index 暂存区域,git commit
提交。
习惯上使用 .gitignore
文件忽视一些不需要/不应该出现在版本库里的文件。如以下内容:
*.bak
*~
*.tmp
*.orig
会使得工作目录下以 .bak
, .tmp
, .orig
和 ~
这几种常见的备份文件后缀结尾的文件不会被跟踪进版本库。
一般 .gitignore
文件会放入版本库。对应命令是 git add .gitignore
。
使用如下命令可以给当前版本打上标签 v1.0:
git tag -a v1.0
输入这条命令后按回车键,会进入文本编辑器(缺省 vi),让你输入一段提交消息。其处理和提交时的消息类似。
如果你有 GPG 密钥,可以把上面的 -a
替换为 -s
以使用自己的 GPG 私钥对标签做数字签名。你可能需要事先指定你的 GPG 密钥 ID:
git config --global user.signingkey 0x12345678
初始化新仓库使用命令:
git clone 远程URL
这会在本机新建项目目录,包含有项目的全部历史。 另外还会自动创建 origin 远程追踪分支,以追踪远程仓库的更改。
拉取仓库新内容并合并到当前分支:(仅建议在master分支做)
git pull origin master
其实简单的 git pull
即可实现上面的功能。
拉取仓库新内容但暂不合并:
git fetch
git push origin master
或者简单地,
git push
tig
终端下的交互式 git 前端,方便浏览历史、查看变更等。
gitk
可视化历史记录,版本间的修改情况等。
git-gui
可以让你在图形界面进行 commit。
TortoiseGit,类似 tortoiseSVN。
Q: 如何删除误推送到远程仓库的标签?
A: git push remote_name :refs/tags/tag_name
- Pro Git 中文版电子版。很不错的入门书。其中有对版本控制的介绍。
- GIT MAGIC, (中文版)
- Git Quick Reference
- cheat sheet
- Git By Example
- Git 使用指南比较基础,一般够用了
- Google Tech Talk: Linus Torvalds on Git, 讲稿 在线
- Git tips
本作品采用知识共享署名-相同方式共享 4.0 Unported许可协议进行许可。