git checkout branchname
* 切换分支,前提是当前分支是干净的,如果有未提交的修改就不能切换,先stash或者commit后再切换。
git branch -a查看所有分支
git branch -r查看远程分支
git branch -d branchname 删除分支
git branch devel
* 创建分支,这个方式新建的的分支,是拷贝了当前的分支的,和当前分支的版本库都一样,就连工作区的内容都是一样的。
git checkout -b devel
* 创建分支,(新建一个分支名叫devel,是复制于当前分支,并切换到devel分支
git checkout -b branchname origin/branchname
* 基于远程库创建分支
git rebase origin/devel
* 与远程的一个分支(这个远程分支首先要通过git fetch拉到本地的),进行合并操作。
* git rebase合并方式的好处,就是不会出现merge造成的分支交叉的情况,版本库增长很清晰。
* 比如当前分支是1,6,7,远程分支是1,2,3,用git rebase合并后,当前分支变为1,2,3,6,7。
* git rebase原理,就是把被合并的分支复制一份,把当前分支的新提交部分,重新依照复制的分支去新规划出差异。
git branch --set-upstream-to origin/devel
* 与远程分支建立连接
* 例子
* taiwudeMacBook-Pro:advanced taiwu$ git branch --set-upstream-to origin/master
* Branch master set up to track remote branch master from origin.
git reset c93a3154298f2
* 根据版本号回退到某个版本,*这时候的版本是这个版本号的,但是差异文件都还在,要是完全回到干净的版本,还得git checkout - - .
git reset —hard c93a3154298f2
* 加上- - hard进行回退到任意版本号,版本库都是完全干净的。
* 如果当前版本下工作区有未提交的差异,这么做,这些差异修改就都没了!!!。
get reset —hard devel
* 假如当前分支是master,上面命令,就是用devel分支完全覆盖master分支。
git reset --hard origin/yl
* 假如当前分支是y1,上面的命令,就是用远程库y1分支,完全覆盖本地的y1分支。
git log advanced/common/models/User.php
* 查看此文件的所有改动历史,历史提交记录(查询某个指定文件的提交历史记录)
* git log --pretty=oneline advanced/common/models/User.php加上参数后,显示的就是每条提交commit id
* git log <文件名> 查看一个文件,所有提交历史
git show 632d8154f69ec7a1160db66424cbb8be75bf7e98 advanced/common/models/User.php
* git show <git提交版本号> <文件名>是用来查看具体文件具体版本号下,文件的修改内容。
git show 632d8154f69ec7
* 查看一个commit中,所有提交的内容
* git show <git提交版本号>
git push —force origin master
场景一: 删除远程库的某次错误提交
远程库上面有多个commit:5、4、3、2、1。
但是4,5两个版本都是我本地修改后提上去的,是错误的版本,我想清除掉。
操作步骤是:
1. git reset f5gr312 (f5gr312为commit 3 的版本号, 回退到3这个版本)
2. git checkout - - . (回退到3了,但是修改都还在,要清空工作区)
3. git push - -force (强行推送至服务器)
说明:
这个操作,实际是本地先回退到之前的一个版本。再把这个版本强行推送到远程对应的分支。那么,远程库 就跟你推上去的版本库一致。
git rm -r —cached ignore_file
* 文件已经commit了,再加入.gitignore是无效的,所以需要删除缓存:
git rebase -i HEAD~3
* 合并多个提交
git 不依赖于原来分支创建新分支(来自51论坛)
不知道大家使用git作为代码管理工具的机会多不多,现在公司就是使用git作为代码管理工具;git真的是不错的代码管理工具,而且越使用越觉得方便
git里面很多功能,今天记录其中一个功能
在项目中修改bug的时候,经常遇到正在修复一个bug,然后又要求你去解决另外一个bug的问题。那么怎么保存之前的修改呢?
在git里面可以使用分支来完成这个工作
1、在a分支上的修改你可以先git stash,隐藏你在a分支上的修改
2、然后基于服务器创建b分支 例如git checkout -b b origin/branch,这时候到b分支上bug fixed并提交;这部很重要,要基于服务器来创建,如果你基于a分支来创建,那么会包含a分支的修改。这显然不是我们希望的结果。
3、然后git checkout a回到a分支,
4、然后git stash pop,继续刚刚a分支的修改
这样我们甚至可以为每个bug创建一个分支,不会互相干扰;而且只有一份代码!