码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-06-13 15:32:32      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

  本文参考 Git – Useful Tips 一文翻译,不当之处,敬请谅解

  这篇文章的目的是给经常使用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的姿势是怎样的?附带我的Git建议

标签:

原文地址:http://www.cnblogs.com/zhaowmm/p/5580511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!