git的一些操作
一、分支管理
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 commit --amend 'xxx' # 修改commit信息
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 <分支名称> # 切换分支
四、rebase 操作
- 目的:合并多个 commit
- 操作:
git rebase -i 版本号 #(不需要合并的最近的版本号)
注意:
1. 如果出现合并冲突,可能还需要手动修改,修改完 `git add .` 后 `git rebase --continue`
2. 撤销合并 `git rebase --abort`