一、分支管理
1. 创建与合并分支
- 一些操作
git checkout -b dev # 创建并切换到`dev`分支
git branch dev # 这两句的效果与上面的一句等同(选择一种)
git checkout dev
git branch # 查看当前分支,当前分支会标记`*`
git add . # 提交当前目录下的全部修改
git commit -m "branch test"
git checkout master # 切回 `master` 分支
git merge dev # 合并`dev`到`master`分支
git branch -d dev # 删除`dev`分支
- 总结
git branch # 查看分支
git branch <name> # 创建分支
git checkout <name> # 切换分支
git checkout -b <name> # 创建+切换分支
git merge <name> # 合并某分支到当前分支
git branch -d <name> # 删除分支
2. 分支管理策略
- 合并分支的时候,如果可能,git会用
Fast forward
模式,这种模式下,会丢掉分支信息 - 如果禁用
Fast forward
模式,git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
git merge --no-ff m "merge with no-ff" dev # 使用 `--no-ff` 参数表示禁用 `Fast forward`
3. feature 分支
git branch -d <name>
git branch -D <name> # 丢弃一个没有被合并过的分支
二、其它
git checkout . # 删除之前的操作
git clean -f # 删除文件
git clean: 用来从工作目录中删除所有没有 tracked 过的文件
(1) git clean 经常和 git reset --hard 一起结合使用,reset只影响被track过的文件,所以需要用clean来删除没有 track 过的文件,结合着两个命令能让工作目录完全回到一个指定的 commit 的状态
(2) git clean -n 提示有哪些文件会被删除,但不会真正的删除文件,只是一个提醒
(3) git clean -f 删除当前目录下所有没有 track 过的文件,不会删除 .gitignore 文件里面指定的文件夹和文件,不管这些文件有没有被 track 过
(3) git clean -f `path` 删除指定路径下没有被 track 过的文件
(4) git clean -df 删除当前目录下没有被 track 过的文件和文件夹
(5) git clean -xf 删除当前目录下所有没有被 track 过的文件,不管它是否是 .gitignore 文件里面指定的文件夹和文件
(6) git reset --hard 和 git clean -f,结合使用能让工作目录完全回退到最近一次 commit 的
三、工作遇到的问题及解决方案
问题:编译之后经常会多出一些文件,此时如果想要切换分支的话,提示会覆盖之前要切换的分支,此时要怎么处理呢?
解决方案:
- 如果想要保留这些编译文件,可以
git add .
和git commit -m "描述信息"
进行提交,然后再切分支 - 如果不想要保留这些文件,可以进行下面的操作
git add .
git commit -m "描述信息"
git log # 查看版本信息
git reset --hard <版本号> # 回退到某个指定的版本号
git status # 查看状态
git checkout <分支名称> # 切换分支
四、工作中用到的 git 操作
1. 开发阶段
(1) git checkout master (开发时需要先切到 master 分支,在 master 分支下创建新分支)
(2) git pull (创建新分支前先拉取远程的最新代码)
(3) git checkout -b feature-xxx (创建并切换到 feature-xxx 分支)
(4) git add .
(5) git commit -m '描述'
(6) git fetch origin
(7) git merge origin/master
(8) git push origin feature-xxx
2. 测试阶段
(1) git status
(2) git add .
(3) git commit -m '描述'
(4) git checkout develop
(5) git pull
(6) git merge origin/feature-xxx (git merge feature-xxx)
(7) git push origin develop
3. 上线阶段
(1) git checkout feature-xxx
(2) node ./build.js xxx -p (生产编译)
(3) git add .
(4) git commit -m '描述'
(5) git fetch origin
(6) git merge origin/master
(7) git push origin feature-xxx
4. 删除分支
(1) git push origin --delete feature-xxx 删除远程分支
(2) git branch -d feature-xxx 删除本地分支
五、rebase 操作
- 目的:合并多个 commit
- 操作:
git rebase -i 版本号 #(不需要合并的最近的版本号)
注意:
1. 如果出现合并冲突,可能还需要手动修改,修改完 `git add .` 后 `git rebase --continue`
2. 撤销合并 `git rebase --abort`