Sublime Merge目录
- 初始应用
- 目录
- Git - 暂存列表(stashes)
- 常用命令
- 存储当前的修改,但不提交commit
- 存储当前的修改,但不提交commit, 并指定标识信息
- 查看stash内容
- 回到某个stash的状态, 如果没有指定参数,将回到最近stash的状态
- 从指定的stash创建一个新分支,如果没有指定stash,默认为最近的stash
- 删除指定的stash, 如果没有指定stash,默认为最近的stash
- 执行 rebase 之前自动 stash
- 什么是 rebase?
- git rebase 和 git merge 有啥区别?
- 注意:
- Git Submodules 子模块
- Git常用命令
- 把远程分支拉到本地
- 查看本地分支
- 查看远程分支
- 查看所有分支
- pull下所有分支
- git fetch & pull详解
初始应用
Local Repositories 本地存储库
Open Repository 打开存储库
New Repository 新建存储库
Clone Repository 克隆存储库
Source URL 源URL
Repository Name 存储库名称
Destination Path 目标路径
目录
BRANCHES 分支
REMOTES 远程仓库
TAGS 标签
STASHES 暂存列表
SUBMODULES 子模块
Git - 暂存列表(stashes)
通过Stashes(暂存列表)可以临时地保存一些还没有提交的工作,以便在分支上不需要提交未完成工作,就可以清理工作目录。
换而言之, 就是将当前的更改临时搁置起来,在需要的时候,可以返回先前的工作目录状态。
默认情况下,仅储藏当前跟踪文件中的更改,新文件将被忽略。
可以独立地创建和应用多个stash。
常用命令
- 执行
git stash
可以将手当前工作目录状态临时保存,可以执行git stash apply
或git stash pop
可以恢复保存的工作目录状态。 - 执行
git stash
后,git status
将显示无任何改动,但可以通过git stash list
查看保存的stash。
git stash # Temporarily stores all modified tracked files
git stash list # Lists all stashed changesets
git stash pop <stash> # Restores the stashed files, and delete the stashed files
git stash apply <stash> # Restores the stashed files, and reserve the stashed files
git stash clear # Remove all the stashed states
存储当前的修改,但不提交commit
git stash
-
-u
或者--include-untracked
参数,可以stash untracked文件 -
-a
或者--all
参数,可以stash当前目录下的所有修改 -
-p
或者--patch
参数,可以交互式stash当前目录下的指定修改 - 无参数,默认存储当前已跟踪的修改
存储当前的修改,但不提交commit, 并指定标识信息
git stash save <message>
查看stash内容
git stash show
- 无参数, 默认查看最新的stash和最新提交的diff结果
-
<stash@{n}>
参数, 查看指定stash和最新提交的diff结果 -
-p <stash@{n}>
参数, 查看指定stash和最新提交的diff结果, 已git diff
方式显示
回到某个stash的状态, 如果没有指定参数,将回到最近stash的状态
git stash apply/pop <stash@{n}>
- apply方式,将指定的stash应用到当前工作目录,对应的stash仍保留在stashes(暂存列表
- pop方式,将指定的stash应用到当前工作目录,并删除对应的stash
从指定的stash创建一个新分支,如果没有指定stash,默认为最近的stash
git stash branch <branch-name> <stash@{n}>
删除指定的stash, 如果没有指定stash,默认为最近的stash
git stash drop <stash@{n}>
执行 rebase 之前自动 stash
git rebase --autostash
什么是 rebase?
git rebase 你其实可以把它理解成是“重新设置基线”,将你的当前分支重新设置开始点。这个时候才能知道你当前分支于你需要比较的分支之间的差异。
原理很简单:rebase需要基于一个分支来设置你当前的分支的基线,这基线就是当前分支的开始时间轴向后移动到最新的跟踪分支的最后面,这样你的当前分支就是最新的跟踪分支。
这里的操作是基于文件事务处理的,所以你不用怕中间失败会影响文件的一致性。在中间的过程中你可以随时取消rebase 事务。
git rebase 和 git merge 有啥区别?
rebase会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。
就好像你从公共分支又重新拉出来这个分支一样。
举例:如果你从 master 拉了个feature分支出来,然后你提交了几个 commit,
这个时候刚好有人把他开发的东西合并到 master 了,这个时候 master 就比你拉分支的时候多了几个 commit,
如果这个时候你 rebase master 的话,就会把你当前的几个 commit,放到那个人 commit 的后面。
merge 会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交
注意:
不要在公共分支使用rebase
本地和远端对应同一条分支,优先使用rebase,而不是merge
为什么不要再公共分支使用rebase?
因为往后放的这些 commit 都是新的,这样其他从这个公共分支拉出去的人,都需要再 rebase,相当于你 rebase 东西进来,就都是新的 commit 了。
Git Submodules 子模块
参考文献:http://www.ayqy.net/blog/%E7%90%86%E8%A7%A3git-submodules/
Git常用命令
把远程分支拉到本地
git fetch origin dev(dev为远程仓库的分支名)
把某个分支上的内容都拉取到本地
git pull origin dev(远程分支名称)
查看本地分支
git branch
查看远程分支
git branch -r
查看所有分支
git branch -a
pull下所有分支
git pull -a
git fetch & pull详解
先用一张图来理一下git fetch
和git pull
的概念:
可以简单的概括为:
git fetch
是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
而git pull
则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge
,这样可能会产生冲突,需要手动解决。