Learn Git

更新一下我工作中比较常用到的 git 技巧。
  • 为公司的项目 repo 单独设置 git 的用户信息,这样就不会影响到其它的项目了。
    • git config user.name "zxy"git config user.email "zxy@zhihu.com"
  • 想要把当前修改的东西都删掉,也就是还原到上一次 commit 的样子。
    • # git clean -df# git checkout -- .
      发现一种更好用的方法
      git stashgit 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 xxx@xx.com
如果更改当前项目的配置,去掉 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文件,列出忽略文件模式。 例如:
# 此为注释 – 将被 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 renamegit remote rm paul delete

打标签

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

技巧和窍门

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

© Xinyu 2014 - 2024