这篇文章的目的是给经常使用git管理项目提供一个有益的提醒。如果你是git新手,可以先阅读文后的引用部分,然后在回头阅读此篇文章。在介绍git命令之前,你可以先看看来自 on-my-zsh 提供的别名。

基本命令

  • git config --global user.name "Your Name"
  • git config --global user.email "youremail@example.com"
  • git config --global core.editor <your favorite editor here>
    • Ex: git config --global core.editor vim
  • git init :初始化一个repo。

Commit 结构

  • git status ( gst ):查看 repo 状态
  • 工作区:
    • .git 目录
    • 暂存区
    • 工作目录

  • git add <filename> ( ga ):添加一个文件到暂存区
  • git add . ( gaa ):添加所有文件到暂存区
  • git add *.js :添加所有后缀为js的文件到暂存区
  • git rm --cached <file> :从暂存区删除一个新文件
  • git commit -m "My first commit" ( gcmsg ):创建一次带 message 的提交
  • git commit -v -a ( gca ):
    • -v 是 verbose 的缩写,会在底部显示差异信息和更多有意义的信息
    • -a 类似于 git add . ,会添加所有被修改和删除的文件,但会忽略新创建的文件
  • git help <command> :查看对应命令的帮助手册
  • git log ( glg , glgg , glo , glog ):查看项目的提交历史

暂存区管理

  • git reset HEAD <filename> ( grh ):从暂存区删除一个被修改的文件
  • git reset HEAD ( grh ):从暂存区删除所有被修改的文件
  • git checkout <filename> ( gco ):从暂存区删除一个被修改的文件,并撤销文件的更改
  • git commit -m "My first commit" --amend :添加文件/更改在暂存区的最后一次提交
  • git commit -v -a --amend ( gca! ):添加文件/更改在暂存区的最后一次提交
  • .gitignore :告诉git,哪些文件不被加入版本跟踪
    • 可以使用 git add <filename> -f 命令添加一个不被版本跟踪的文件
  • git diff <filename> ( gd ):查看基于当前文件的最后一次提交的更改差异
  • git diff ( gd ):查看基于所有文件的最后一次提交的更改差异
  • git reset HEAD~2 --soft :从项目提交历史中删除最近两次提交,但不丢弃文件的更改
  • git reset HEAD~2 --hard :从项目提交历史中删除最近两次提交,但会丢弃文件的更改和在(最后两次)提交中创建的新文件
  • git reset <commit> --soft --hard :
    • --soft :将所有被更改的文件回溯到“待提交”状态
    • --hard : commit 之后,对被git追踪的文件的任何更改都被丢弃
  • git reflog :显示包括 被撤销 在内的所有提交
  • git merge <commit hash> :重新提交(restore the commit)
  • git clean -f :删除工作目录中不被git进行版本追踪的文件

Stashed & Branches

Stash

  • git stash ( gsta ):将所有暂存区的文件移动到“储藏区”,类似于另一种类型的工作区
  • git stash list :查看储藏队列(Stash lists)
  • git stash apply :将最近一次储藏恢复到暂存区(可以用类似 git stash apply stash@{num} (num从0开始计数) 的命令来使用在队列中的任意一个储藏(stashes))
  • git stash clear :清空储藏队列
  • git stash save "name of the stash" :为储藏设置命名
  • git stash pop ( gstp ):将最近一次储藏恢复到暂存区并从储藏队列删除此储藏
  • git stash drop ( gstd ):从储藏队列删除最近一次储藏( stash@{0} )(git stash drop stash@{num} 从储藏队列删除指定储藏)

Branch

  • git checkout -b dev ( gco ):创建 dev 分支并从当前分支切换到 dev 分支
  • git branch ( gb ):查看所有分支
  • git checkout master ( gcm ):切换到主分支
  • git merge <branch> ( gm ):合并分支
  • git rebase master :先将 master 上的更改合并到当前分支,再添加当前分支的更改。如果有冲突,解决冲突后加 --continue 参数继续合并
  • git branch -d <branch> : 删除分支, -D 则强制删除分支
  • git merge <branch> --squash :将多次提交合并成一个,其流程如下:
# Go to the `master` branch
git checkout master
# Create a temp branch
git checkout -b temp
# Merge the feature/x branch into the temp using --squash
git merge feature/x --squash
# See the new modifications/files in the Staging Area
git status
# Create the unified commit
git commit -m "Add feature/x"
# Delete the feature/x branch
git branch -D feature/x
  • rebase 和 merge 的区别:

    • rebase:

      • 提交历史(的展示)是线性的
      • 缺点:会删除最近一个 commit,然后创建一次新的 commit
      • 如果已提交到远程,不要使用 rebase
    • merge:
      • 提交历史(的展示)是分叉的
      • 对于两个分支的合并,会创建一个次新的 commit

远程仓库管理

  • git remote add <name> <url> :添加一个将被追踪的远程仓库
  • git remote rm <name> :移除一个远程仓库
  • git push <remote> <remote-branch> ( gp , ggp ):将当前分支的本地 commit 推送到远程仓库
  • git fetch <remote> <remote-branch> :拉取远程仓库的最新 commit 到当前(本地)分支( <remote>/<branch> ),不会合并
  • git pull <remote> <remote-branch> ( gl , ggl ):拉取远程仓库的最新 commit 到当前(本地)分支,并自动 merge
    • git pull --rebase ( gup ):以 rebase 的方式进行合并,而不是 merge

其它有用的命令

  • git tag <name> :创建一个 tag(如:v1.3)
  • git push --tags :将本地 tags 推送到远程仓库
  • git push <tag> :推送指定的本地 tag 到远程

有用的git建议的更多相关文章

  1. 你不一定知道的几个很有用的 Git 命令

    这里给大家分享一些很有用的 Git 命令,其中很多用法你可能都不知道,无论你是工作在团队环境中或在您的个人项目中,这些命令将对你帮助很大,让你可以更加高效的进行项目开发,更轻松愉快的工作和生活. 您可 ...

  2. 不常用但很有用的git show 和 git blame

    团队使用git 合作时,可能遇见想要查看一段比较难以阅读代码, 此时可能需要联系最新的修改者是哪位,这时候最有用的最快捷的方法就是git blame 啦, 这个指令的output是一个文件的各个区域段 ...

  3. 有用的git片段

    世界上知识那么多,又岂是人力所能穷尽,于是术业有专攻.对于git,有用的命令片段其实非常少,而命令却是非常多.于是,掌握git常见的用法就足够了.不要在语句级别上记忆git命令,在代码片段级别上记忆g ...

  4. git 建议使用

    1 登录github官网首页 创建一个项目 2 本地克隆下载git项目 git clone https://github.com/wangguoxingduanxuejing/branch-pract ...

  5. 有用的git命令

    1. git log -p // 查看log的详细信息 2. git reset HEAD xxxx // 将文件从stage状态拉出来 3. git checkout -- xxxx // 将修改的 ...

  6. 一些有用的git命令清单

    以下是一些我常用的git命令清单 如果以下的命令不清晰细节,请看git的文档. 设置个人信息 git config --global user.name "John Doe" gi ...

  7. 8 个不常见但很有用的 Git 命令

    1. 拉取远程代码并且覆盖本地更改 2. 列出远程和本地所有分支 3. 强制更新远程分支 4. 回滚一个 merge 5. 修改之前的提交记录或者很久前提交的记录 6. 使用多个远程代码库,并且使用多 ...

  8. 超级有用的git reset --hard和git revert命令

    很多时候,git新手容易误操作,比如,在levelIISZ-1.4.dev分支下,运行了git pull idc cpp-1.0的结果,这样做麻烦很大,经常导致maven项目格式不正确,这个时候,可以 ...

  9. 日常使用 Git 的 19 个建议[转]

    我使用Git已经有4年之久,在这里想分享一些实用的小技巧,希望能对大家有所帮助. 如果你对git一无所知,那么我建议先去读一下Git 常用命令速查.本篇文章主要适合有一定 git 使用基础的人群. 目 ...

随机推荐

  1. Play Framework 完整实现一个APP(八)

    创建Tag标签 1.创建Model @Entity @Table(name = "blog_tag") public class Tag extends Model impleme ...

  2. 归档—监控ORACLE数据库告警日志

    ORACLE的告警日志里面包含许多有用的信息,尤其是一些ORACLE的ORA错误信息,所以有必要及时归档.监控数据库告警日志的ORA错误,及时提醒数据库管理员DBA处理这些错误信息,那么我们首先来看看 ...

  3. Spark存储管理(读书笔记)

    Spark存储管理(读书笔记) 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark的存储管理 RDD的存放和管理都是由Spark的存储管理模块实现和管理的.本文从 ...

  4. php时间

    date_default_timezone_set('PRC'); //默认时区 //当前的时间增加5天 $date1 = "2014-11-11"; echo date('Y-m ...

  5. linux

    托瓦兹跟BBS上面一堆工秳师一样, 他发现Minix虽然真癿很棒,但是谭宁邦教授就是丌愿意迚行功能癿加强,导致一堆工秳师在操作系统功能上面癿欲求丌满! 这个时候年轻癿托瓦兹就想:『既然如此,那我何丌自 ...

  6. 解决ntp的错误:no server can be used,exiting

    台湾地区一台机器进行时间同步时,出现下面的错误.很显然,它提示的是不能找到主机time.stdtime.gov.tw. 所以我初步猜测是由于dns解析的问题   1 2 3 4 #  /usr/sbi ...

  7. Android Stduio 发生 Process 'command 'somePath:java.exe'' finished with non-zero exit value 2 异常的解决办法

    有时你会发现,在你使用Android Studio 进行编译的时候提示: Error:Execution failed for task ':demo:dexDebug'.> com.andro ...

  8. ubuntu下怎么给普通用户赋予sudo权限

    ununtu系统安装过程中,系统会提示建立一个默认用户,比如用户名为:zhuhui.这个默认用户具有一定的管理功能,即可以通过sudo命令执行root权限的操作.由于Ubuntu系统默认不允许通过ro ...

  9. 一个开关电源传导、辐射处理案例-----Layout环路

    这是一款输入宽电压120-277V  60HZ,输出48V,273mA的电源,使用美芯晟MT7933,采用Buck拓扑结构. 注:在最初的设计中,预留电感L1.L2,CBB电容C1.C2作为传导测试元 ...

  10. C++11 新特性: unordered_map 与 map 的对比

    unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value.不同的是unordered_map不会根据key的大小进行排序, 存储时是根据key的ha ...