一.安装Git
Git 官方网站下载: 打开 http://git-scm.com/download/win,下载会自动开始。
二.初次运行 Git 前的配置
Git 自带一个 git config
的工具来帮助设置控制 Git 外观和行为的配置变量。当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。
用户信息:
$ git config --global user.name "John Doe" $ git config --global user.email [email protected]
如果想要检查你的配置,可以使用 git config --list
命令来列出所有 Git 当时能找到的配置。
三.获去Git仓库项目
克隆仓库的命令格式是 git clone [url]
:
$ git clone https://github.com/libgit2/libgit2
完成后,会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git
文件夹,从远程仓库拉取下所有数据放入 .git
文件夹,然后从中读取最新版本的文件的拷贝。
现在可以开发项目了。
四.记录每次更新到仓库
请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。我们逐步对将这些文件进行修改,再把修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复。
检查当前文件状态:
要查看哪些文件处于什么状态,可以用 git status
命令。如修改了README文件:
$ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) README nothing added to commit but untracked files present (use "git add" to track)
此时,READMD文件处于已修改,未跟踪状态。
跟踪新文件:
使用命令 git add
开始跟踪一个文件。但凡被修改过的文件都要重新跟踪暂存:
$ git add README
此时,README 文件已被跟踪,并处于暂存状态。
查看已暂存和未暂存的具体修改:
使用git diff指令查看未暂存的文件修改:
$ git diff
请注意,git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你一下子暂存了所有更新过的文件后,运行 git diff
后却什么也没有,就是这个原因。
若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached
命令:
$git diff --cached
五.提交更新
现在的暂存区域已经准备妥当可以提交了。每次准备提交前,先用 git status
看下,是不是都已暂存起来了, 然后再运行提交命令 git commit:
$ git commit
这种方式会启动文本编辑器以便输入本次提交的说明。
另外,你也可以在 commit
命令后添加 -m
选项,将提交信息与命令放在同一行:
$ git commit -m "Story 182: Fix benchmarks for speed"
六.移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm
命令完成此项工作:
$ git rm PROJECTS.md
七.查看提交历史
在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 git log
命令:
$ git log
八.撤销操作
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 git commit --amend 选项的提交命令尝试重新提交:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
取消暂存文件:
暂存后,会提示使用 git reset HEAD <file>...
来取消暂存:
$ git reset HEAD CONTRIBUTING.md
撤销对文件的修改:
如果你并不想保留对 CONTRIBUTING.md
文件的修改怎么办? 你该如何方便地撤消修改 - 将它还原成上次提交时的样子:
$ git checkout -- CONTRIBUTING.md
注意:如果是路径形式的文件,去掉 --。
九.远程仓库的操作
未完待续。。。
查看远程仓库:
添加远程仓库:
从仓库中抓取和拉取:
推送到远程仓库:
远程仓库的移除和重命名:
十.打标签
在 Git 中列出已有的标签是非常简单直观的。 只需要输入 git tag:
$ git tag v0.1 v1.3
十一.Git分支
新建分支:
想要新建一个分支并同时切换到那个分支上:
$ git branch iss53
$ git checkout iss53
合并分支:
需要合并 iss53
分支到 master
分支,只需要检出到你想合并入的分支,然后运行 git merge
命令:
$ git checkout master Switched to branch 'master' $ git merge iss53
遇到冲突时的分支合并:
在合并冲突后的任意时刻使用 git status
命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件:
$ git status On branch master You have unmerged paths. (fix conflicts and run "git commit") Unmerged paths: (use "git add <file>..." to mark resolution) both modified: index.html no changes added to commit (use "git add" and/or "git commit -a")
Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。
在你解决了所有文件里的冲突之后,对每个文件使用 git add
命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决。
如果你想使用图形化工具来解决冲突,你可以运行 git mergetool
,该命令会为你启动一个合适的可视化合并工具,并带领你一步一步解决这些冲突:
$ git mergetool This message is displayed because 'merge.tool' is not configured. See 'git mergetool --tool-help' or 'git help config' for more details. 'git mergetool' will now attempt to use one of the following tools: opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge Merging: index.html ...
等你退出合并工具之后,Git 会询问刚才的合并是否成功。 如果你回答是,Git 会暂存那些文件以表明冲突已解决: 你可以再次运行 git status
来确认所有的合并冲突都已被解决:
$ git status On branch master All conflicts fixed but you are still merging. (use "git commit" to conclude merge) Changes to be committed: modified: index.html
如果你对结果感到满意,并且确定之前有冲突的的文件都已经暂存了,这时你可以输入 git commit
来完成合并提交。 默认情况下提交信息看起来像下面这个样子:
Merge branch 'iss53' Conflicts: index.html # # It looks like you may be committing a merge. # If this is not correct, please remove the file # .git/MERGE_HEAD # and try again. # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # All conflicts fixed but you are still merging. # # Changes to be committed: # modified: index.html #
分支管理:
git branch
命令不只是可以创建与删除分支。 如果不加任何参数运行它,会得到当前所有分支的一个列表:
$ git branch iss53 * master testing