1. Git配置
Git 提供了一个叫做git config 的工具,专门用来配置或读取相应的工作环境变量。这些环境变量,可以存放在以下三个不同的地方:
- /etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用git config 时用--system 选项,读写的就是这个文件。
- ~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用git config 时用--global 选项,读写的就是这个文件。
- 当前项目的git 目录中的配置文件(也就是工作目录中的.git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config 里的配置会覆盖/etc/gitconfig中的同名变量。
在Windows 系统上,Git 会找寻用户主目录下的.gitconfig 文件。主目录即$HOME 变量指定的目录,一般都是C:\Documents and Settings\$USER。接下来配置个人的用户名称和电子邮件地址。这两条配置很重要,每次Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
$ git config --global user.name "John Doe";
$ git config --global user.email johndoe@example.com
要检查已有的配置信息,可以使用git config --list 命令;
也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:
$ git config user.name
abd
$ git config user.email
xxxxx@formail.com
获取帮助常用命令
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
2. Git基础
2.1 取得git仓库
从本地目录初始化一个仓库执行:
$ git init
初始化后,在当前目录下会出现一个名为.git 的目录,所有Git 需要的数据和资源都存放在这个目录中。.git文件也叫本地仓库。
从现有仓库克隆执行命令:git clone [url]。
$ git clone git@github.com:name/rep_name.git
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
2.2 记录更新到仓库
工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪,在Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
常用命令
- git status : 查看当前本地仓库状态
- git add : 跟踪新文件 ,即是把文件修改添加到暂存区(stage)
- git commit -m "commit construction" : 提交更改,实际是把暂存区的所有内容提交到当前分支
- git rm : 从暂存区中移除某个文件
- git mv file_from file_to : 移动文件,在同一个目录中移动,相当于对文件重命名
- git log : 查看提交历史
- $ git log –p -2 : -p 选项展开显示每次提交的内容差异,用-2 则仅显示最近的两次更新
- $ git log --pretty=oneline --pretty 选项可改变提交展示提交历史的默认格式,如用oneline将每个提交放在一行显示,这在提交数很大时非常有用
- 其它选项 说明:
-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(后跟指定格式)
2.3 远程仓库的使用
-
查看当前的远程仓库 git remote
git remote
它会列出每个远程库的简短名字。在克隆完某个项目后,至少可以看到一个名为origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库。
也可以加上-v 选项(译注:此为—verbose 的简写,取首字母),显示对应的克隆地址:
$ git remote -v
origin git://github.com/schacon/ticgit.git
- 添加或者关联一个远程仓库 git remote add [remote_shortname] [url]
$ git remote add ups git@server-name:path/repo-name.git
- 从远程仓库抓取数据到本地 git fetch [remote_shortname]
- 如果是克隆了一个仓库,此命令会自动将远程仓库归于origin 名下。所以,git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
- 如果设置了某个分支用于跟踪某个远端仓库的分支,可以使用git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在日常工作中我们经常这么用,既快且好。实际上,默认情况下git clone 命令本质上就是自动创建了本地的master 分支用于跟踪远程仓库中的master 分支(假设远程仓库确实有master 分支)。所以一般我们运行git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中当前分支。
-
推送数据到远程仓库 git push ([remote_name]) ([branch_name])
$ git push origin master
只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,并到自己的项目中,然后才可以再次推送。
-
查看远程仓库信息 git remote show [remote_name]
$ git remote show origin
- 远程仓库的删除和重命名
- 重命名 git remote rename [oldname] [newname]
git remote rename pb paul
- 删除 ** git remote rm [remote_repname]
$ git remote rm paul
3. Git 分支
Git中,HEAD指针是一个指向你当前正在工作中的本地分支的指针。在切换分支时,HEAD指针指向切换后的分支。
3.1 基本分支常用命令
- git branch : 查看所有分支信息,当前分支前面会标一个*号
- git branch <branch_name>: 创建分支
- git checkout <branch_name>: 切换分支
- git checkout -b <branch_name>: 创建同时切换到新创建的分支
- git checkout -b <branch_name>origin/branch_name : 在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致
- git merge <branch_name>: 合并某分支到当前分支,有冲突,先执行git status 查看哪个文件冲突,再执行git add 或者 git commit命令解决冲突
- git branch -d <bbranch_name>: 删除分支
- git log --graph : 查看分支合并详细图
- git log --graph --pretty=oneline --abbrev-commit(常用此命令) : 查看分支合并缩略图(只显示每次提交的一行)
3.2 远程分支
3.2.1 创建和管理远程分支
远程分支就是本地分支push到服务器上的时候产生的
- 创建本地分支
git branch b1
- 切换本地分支
git checkout b1
- 远程分支就是本地分支push到服务器上,服务器会自动创建一个和本地同名的远程分支。git push [远程仓库名]:[远程分支名]
git push origin b1
- 抓取远程分支数据
- git pull <remote_rep>这种方式没有把本地分支和远程分支链接起来
- git branch --set-upstream branch-name origin/branch-name 建立本地分支和远程分支的关联,然后再使用git pull,如果有冲突,要先处理冲突
- 推送数据到远程服务器
- 如果在当前分支,使用
git push
或者
git push origin b1
- 不在当前分支,使用
git push origin <local_branch_name>:<remote_branch_name>
-
删除远程分支
git push [远程仓库名] :[远程分支名],删除远程分支名,注意:前的空格不能少,原理是把一个空分支push到server上,相当于删除该分支
git push origin :b1
4. Git储藏功能(Stashing)
经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。
git stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。
常用命令
参考:
- 《Pro Git》中文版
- 廖雪峰Git教程