update: 2016/08/29
更新一下我工作中比较常用到的 git 技巧。

  • 为公司的项目 repo 单独设置 git 的用户信息,这样就不会影响到其它的项目了。

    1
    2
    git config user.name "zxy"
    git config user.email "[email protected]"
  • 想要把当前修改的东西都删掉,也就是还原到上一次 commit 的样子。

    1
    2
    # git clean -df
    # git checkout -- .

发现一种更好用的方法

1
2
git stash
git stash drop
  • 如果上一次的 commit 不想要了,下面这条命令会取消你的 commit,并回到 * 的状态。
    git reset HEAD^

  • 如果你干脆不想要上一次的 commit 了。
    git reset --hard HEAD^

  • 如果你想把在某个分支的 commit 转移到其它的分支。
    可以使用 git cherrypick 功能(不知道为什么要起个这样的名字


本文所有内容筛选自Git ,我只是总结了一些我觉得有用的。

其实我学习编程不长时间就了解到了开源和GitHub。那时觉得(现在也是),大家齐心协力地开发一个程序是一件提高技术而且有趣的事儿。苦于技术不够,一直没有机会研究这些。最近有一些空闲时间,决定系统地研究一下git,学习一下开源代码。

èµ·æ­¥

配置

  • git config
    • /etc/gitconfig 系统中所有用户都适用的配置
    • ~/.gitconfig 只适用于该用户的配置
    • .git/config 当前项目中的配置

用户信息

$ git config --global user.name "X140Yu"

$ git config --global user.email [email protected]

如果更改当前项目的配置,去掉 global 选项

查看配置信息

git config -l

获取帮助

$ git help config 获取有关于config的帮助

Git 基础

取得项目的 Git 仓库

  • 在本地初始化新仓库
    git init 对某个现有项目进行 git 管理
    git add 指定跟踪的文件
    git commit -m 'something' 提交
  • 从现有仓库克隆
    git clone [url] name 从[url]处保存每一个文件每一个版本(分布式的优点) 此操作会在当前目录创建一个 name 的目录,name 参数可以忽略。

记录每次更新

文件的两种状态:

  • 已跟踪
  • 未跟踪

已跟踪的文件修改完毕后放入暂存区,最后一次性提交所有暂存的文件。

检查当前文件状态

git status

跟踪新文件

git add filename
把目标文件快照放入暂存区,如果为未跟踪文件会被标记为需要跟踪。

忽略某些文件

某些文件不需要被纳入 git 管理,可以在项目内创建.gitignore文件,列出忽略文件模式。
例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件`
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# ignore all .txt files in the doc/ directory
doc/**/*.txt

查看已暂存和未暂存的更新

git diff 尚未暂存的文件和暂存快照之间的差异。
git diff --staged 暂存起来的文件和提交时的差异

提交更新

git commit 打开编辑器输入提交说明
git commit -m "xxxxx" 在一行命令中提交更新
git commit -a 跳过add步骤直接提交

移除文件

git rm 从暂存区移除,连带从工作目录删除
git rm --cached 移除跟踪但不删除文件

移动文件

git mv file_from file_to

查看提交历史

git log 列出所有更新
git log -p列出每次提交的内容差异

撤销操作

git commit --amend 修改最后一次的提交
git reset HEAD filename 取消已经暂存的文件,变为未暂存
git checkout -- filename 取消对文件的修改,仅限于还没放入暂存区的文件

远程仓库的使用

git remote 查看当前远程库
git remote -v 显示对应的克隆地址
git remote add [shortname] [url] 添加一个新的远程仓库
git fetch pb 抓取 pb 这个仓库的
git push origin master 推送数据到远程仓库
git remote show origin 查看某个远程仓库的详细信息
git remote rename pb paul rename
git remote rm paul delete

打标签

git tag 列出现有标签
git tag -a 添加标签
git show v0.1 显示v0.1标签的信息

技巧和窍门

git config --global alias.xxx yyyyy 把 yyyy 起别名为 xxx