赞
踩
拉取之前,可以使用git branch -a查看所有分支(或者使用git branch -r 查看所有远程分支)。
目前来说,我使用的比较多的是最后一种,这种方式可以直接在本地建立一个与远程分支同名的本地分支,并追踪到远程分支
git checkout -b feature/my-feature
git push origin feature/my-feature
git branch -d feature/my-feature
git push origin --delete feature/my-feature
三种方式的缺点:
rebase会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像你从公共分支又重新拉出来这个分支一样。
举个栗子:
以一般的gitflow中feature分支的操作为例子:
全部使用merge方式:
使用merge+rebase方式:
两种方式相比,明显后者的提交信息更加清爽。
rebase的工作原理可以看下git官方文档:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA
核心原理就是将feature的提交点放在baseline的最后面。
rebase的黄金守则:
绝不要在公共的分支上使用它!
在你运行 git rebase 之前,一定要问问你自己「有没有别人正在这个分支上工作?」。如果答案是肯定的,那就不能rebase
个人理解:只对尚未推送或分享给别人的本地修改执行变基操作清理历史;从不对已推送至别处的提交执行变基操作
git rebase的缺点:
由于日常开发中,为了提交方便,一般直接使用idea进行commit操作,而idea会直接将文件提交到暂存区和本地仓库。所以,这里讨论的是,如何把将工作区撤销到某个 commit 点。
因为已经push到远程仓库了,有可能别人已经拉取了最新的 commit 点,这个时候就不能使用 checkout 或者 reset 命令直接撤销commit点了(这样 push 的时候会冲突),这个时候我们可以用git revert方法,revert会提交一个新的commit点,用来撤销我们选择的 commit 点的内容。
git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit
git revert fa042ce57 撤销指定的版本,撤销也会作为一次提交进行保存。
下面附张图:
如果,开发到一半,突然需要切换到另外一个分支,提交代码,但是当前分支代码又没完成,怎么办?使用 git stash ! git stash 操作会将 工作区 和 暂存区 的改动放到 工作现场。
一般使用顺序是:
以下需要重写的历史 commit 都默认为未 push 到远程的本地commit历史。
git commit --amend 后,通过文本编辑器来修改
如果你已经完成提交,又因为之前提交时忘记添加一个新创建的文件,想通过添加或修改文件来更改提交的快照,也可以通过类似的操作来完成。 通过修改文件然后运行 git add 一个已追踪的文件,随后运行 git commit --amend 拿走当前的暂存区域并使其做为新提交的快照。
git add 需要add的文件
git commit --amend
使用这个技巧的时候需要小心,因为修正会改变提交的 SHA-1 校验和。 它类似于一个小的变基——如果已经推送了最后一次提交就不要修正它。
选中当前头指针之前的3个提交
git rebase -i HEAD~3
进入交互界面:
这张图,可以分两个部分看:
先看注释内容,理论知识大概掌握先:
交互步骤:
这是因为,如果远程仓库如果有新的 commit ,本地仓库也有新的 commit ,这个时候如果git pull,本地会多一个 merge 的 commit 点。这种情况,其实可以通过 git pull --rebase 来解决,但考虑到变基操作学习成本较高,故不做介绍。
用户分支的管理工作
git checkout主要有下面两个用处:
回退文件时的常用命令:
分支操作时的常用命令
分支切换:
本地新建分支:
本地新建分支,并track到远程分支:
https://github.com/royeo/git-checkout-branch
安装命令(本地需要安装git):
curl -sSL https://github.com/royeo/git-checkout-branch/releases/download/v0.4.0/git-checkout-branch-`uname -s`-`uname -m` -o /usr/local/bin/git-checkout-branch && chmod +x /usr/local/bin/git-checkout-branch
git config --global alias.cb checkout-branch
使用:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。