首页 > 代码库 > Git 简洁教程之 高级操作
Git 简洁教程之 高级操作
git 合并冲突的解决
- 在分支QA上面修改readme.txt文件,并进行提交
- 在分支DEV上面修改readme.txt文件,并进行提交
- 切换到Master分支,并把QA的修改合并过来,此时可以顺利的进行合并
- 此时尝试在Master上合并DEV的内容时,会提交失败,并提示有冲突
- 打开readme.txt文件,手动清楚差异
- 对readme.txt执行add以及commit操作
- 使用git log --graph --pretty=oneline --abbrev-commit 命令可以看到分支合并的情况
- 分别切换到QA/DEV/MASTER三个分支,执行git push 命令将修改push到github上,下面以dev分支为例
禁用fast forward模式
Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。在merge的时候通过命令:git merge --no-ff -m "merge with no-ff" dev
创建Bug分支
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101
来修复它,但是,等等,当前正在dev
上进行的工作还没有提交,
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
幸好,Git还提供了一个stash
功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
流程大概如下
- 在正在开发的dev分支上执行git stash
- 切换到master分支,利用master分支创建issue-101分支
- 在issue-101上修复完后,切换到master分支,将issue-101分支的内容合并过来,并删除issue-101分支
- 切换到dev分支,执行git stash list 查询stash列表,利用git stash apply或是git stash pop恢复步骤1中的dev内容
使用git stash apply
恢复,恢复后,stash内容并不删除,你需要用git stash drop
来删除,用git stash pop
,恢复的同时把stash内容也删了
强行删除分支
当对一个分支进行修改的过程中,如果还有文件没有提交,此时想立刻终止该分支的修改,并删除该分支,此时若使用git branch -d 进行删除会提示有未提交的文件,不能删除,可以使用git branch -D 进行强制删除
多人协作的开发流程
通过在一台电脑的两个目录来模拟多个开发者在远程dev分支的开发,下面的流程对任一开发者都适用
- 使用git clone创建本地仓库
- 使用git checkout -b dev origin/dev 创建远程dev分支的本地仓库
- 在本地的dev分支上进行修改并commit.
- 此时另外一位开发者已经向
origin/dev
分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送,此时会因为冲突报错 - 此时需要用git pull 命令把最新的更改抓取下来,并对文件进行合并
如果git pull
也失败了,原因是没有指定本地dev
分支与远程origin/dev
分支的链接,根据提示,设置dev
和origin/dev
的链接:
合并后进行commit$ git branch --set-upstream dev origin/dev
- 此时可以将修改push到远程的dev上了
此时github上的信息已经得到更新
标签的相关操作
- git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
- git tag -a <tagname> -m "blablabla..."可以指定标签信息;
- git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
- git tag 可以查看所有标签
- git show <tagname>用于查看tag的明细
- 删除tag
- git tag -d <tagname>删除一个本地的tag
- 对于一个已经提交到远程仓库的tag,要删除的话需要先执行git tag -d v0.9 进行本地删除,然后在执行git push origin :refs/tags/v0.9 进行远程删除
- 推送 tag到远程仓库
- git push orgin v0.1 将一个tag推送到远程仓库
- git push origin --tags 一次性推送全部尚未推送到远程的本地标签
忽略特殊文件
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示“Untracked files ...”,有强迫症的童鞋心里肯定不爽。
好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:
好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
下面举个java的例子
- 在目录下创建一个java文件,并执行javac,此时查看状态
- 在该目录下创建一个
.gitignore文件,并输入*.class,再次执行git status,发现class文件没有被跟踪了
Git 简洁教程之 高级操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。