有用的git建议

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

基本命令

  • git config --global user.name "Your Name"
  • git config --global user.email "[email protected]"
  • 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 [email protected]{num} (num从0开始计数) 的命令来使用在队列中的任意一个储藏(stashes))
  • git stash clear :清空储藏队列
  • git stash save "name of the stash" :为储藏设置命名
  • git stash pop ( gstp ):将最近一次储藏恢复到暂存区并从储藏队列删除此储藏
  • git stash drop ( gstd ):从储藏队列删除最近一次储藏( [email protected]{0} )(git stash drop [email protected]{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 到远程
时间: 2024-10-14 07:13:09

有用的git建议的相关文章

使用正确的Git的姿势是怎样的?附带我的Git建议

本文参考 Git – Useful Tips 一文翻译,不当之处,敬请谅解 这篇文章的目的是给经常使用git管理项目提供一个有益的提醒.如果你是git新手,可以先阅读文后的引用部分,然后在回头阅读此篇文章.在介绍git命令之前,你可以先看看来自 on-my-zsh 提供的别名. 基本命令 git config --global user.name "Your Name" git config --global user.email "[email protected]&quo

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

很多时候,git新手容易误操作,比如,在levelIISZ-1.4.dev分支下,运行了git pull idc cpp-1.0的结果,这样做麻烦很大,经常导致maven项目格式不正确,这个时候,可以用git reset --hard 去撤销这次修改 但是这样做也有问题,可能之前本地的,没有提交的修改,都消失了.可以尝试git revert命令 reset是指将当前head的内容重置,不会留任何痕迹. Sets the current head to the specified commit a

12个git实战建议和技巧

摘要:git无疑是现在最热门的版本控制工具,而且正在进一步侵占SVN以及CVS的市场.本文作者从国外技术问答社区Stack Overflow整理的12个很实用的git使用技巧和建议,希望对你有帮助. 1.使用“git diff”来折叠多行 用git diff经常会出现很多内容,导致很多内容被遮住了,让人很是苦恼,幸运的是这里有个解决方案. 如果你使用less作为默认的pager,只需要输入-s,就可以保证不会被diff刷屏了. 或者,你也可以使用git config设置pager来达到同样的效果

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

我使用Git已经有4年之久,在这里想分享一些实用的小技巧,希望能对大家有所帮助. 如果你对git一无所知,那么我建议先去读一下Git 常用命令速查.本篇文章主要适合有一定 git 使用基础的人群. 目录: 日志输出参数 查看文件的详细变更 查看文件中指定位置的变更 查看尚未合并(merge)的变更 查看其他分支中的文件 关于变更基线(rebase)的几点说明 本地合并之后保留分支结构 修复而非新建提交 的三种状态以及它们的相互转换 优雅地回退 使用第三方工具查看整个项目(而非单独文件)的变更 忽

Git Pro深入浅出(一)

强力推荐使用命令行(Mac:Terminal:Windows:Command Prompt或PowerShell)!!!因为,只有在命令行模式下你才能执行Git的所有命令,而大多数的GUI软件只实现了Git所有功能的一个子集以降低操作难度.如果你学会了在命令行下如何操作,那么你在操作GUI软件时应该也不会遇到什么困难,但是,反之则不成立. Git是什么?为什么使用Git?如何使用Git? 一.版本控制 什么是"版本控制"?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修

我的git笔记

转眼间加入git的阵营已经快两年了,结识git,缘起github,2年前在寻找代码托管网站,当时还是用svn,起初使用google code,可是google的服务虽好,在天朝你懂得,后来发现了github,多亏了蒋鑫老师的<GotGitHub>将我带入github的大门,如果你是个github新手,那我强烈建议你阅读这篇文章,里面讲了很多东西. 起初的时候我是用github for windows这个客户端,在切换到多分支的时候被,自动转换换行符坑的不浅,后来越来阅读了<git详解&g

Git手册

GitUserManualChinese - Robin Wiki GitUserManualChinese Git 用户手册(1.5.3 及后续版本适用) 翻译: 罗峥嵘 (Robin Steven) < [email protected] > 英文版本: http://www.kernel.org/pub/software/scm/git/docs/user-manual.html Contents Preface 前言 Chapter 1. Repositories and Branch

CentOS搭建Git服务器及权限管理

声明:本教程,仅作为配置的记录,细节不展开,需要您有一点linux的命令基础,仅作为配置参考. 1. 系统环境 系统: Linux:CentOS 7.2 64位 由于CentOS已经内置了OpenSSH,如果您的系统没有,请自行安装. 查看ssh版本 $ ssh -V # 输出以下表示没问题,可以继续. 版本可能不一致,能用即可. OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013 避免系统环境和其他的不一致,请核对您系统的版本,其他发行版请对应修改

Git 版本控制系统的基本使用、常用操作

以Ubuntu16.04操作系统为例(其他系统类似),主要记录常用的.基本操作: 0. 安装Git 分散型版本控制系统(CVS): sudo apt-get install git 1. 初始化本地配置git或其他配置等(配置仓库或者全局选项) git config --global user.name "your_name" git config --global user.email "[email protected]" git config --global