1、Git 是什么
Git:分布式版本控制系统,为第三代控制工具(第二代为SVN),可进行离线操作。
2、Git init 命令中 bare参数的含义
bare参数用来指定是否在初始化时进行“裸存储库”指定
何为裸存储库(bare repository)?
和working repository相比,无工作目录,仅包含.git版本追踪文件,多用于开发者在开发过程中向其它项目团队成员或同一个项目在不同电脑上进行时向他人分享本地仓库中的版本(满足分布式开发需求)
3、Git的编译语言
C语言,相比可减少Git运行时的开销
4、如何撤销文件
撤销修改 1、直接在文件中修改
2、版本回溯
3、git checkout —文件名 (注意添加 “-”*2,否则会变为创建新分
支)
若已经git add的代码:使用git reset HEAD filename来放弃指定文件的修改缓存(放弃所有为git reset HEAD .)
若已经commit上去的代码:使用 git reset --hard HEAD^/commitid 进行commit版本回退
若已经push上去的代码:1、可以通过修改错误文件,重新进行commit操作进行修改
2、使用git revert命令进行版本回溯
5、Git reset 和 revert的区别
Git reset为直接删除指定commit , Git revert 为使用一次新的commit来对之前的commit 进行回滚
如果已经push到线上代码库,使用reset可能在之后push时导致冲突
如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.
(参考:https://blog.csdn.net/xybelieve1990/article/details/62885292)
6、Git中“Staging area/Index“
为本地工作区的缓存区域 working directory➡️(git add)➡️staging area ➡️ git commit ➡️ localrepo
7、当遇到紧急BUG需要处理时,当前修改的代码如何处理
使用Git stash 命令
git stash:进行工作区缓存处理
git stash save 'massage':对当前分支的修改内容进行缓存处理,message为备注
git stash list:查看工作区所有缓存
git stash apply:工作区内容恢复(该命令并不会删除目标缓存记录)
git stash pop:对工作区最顶层缓存文件进行恢复并且删除该缓存记录
git stash drop:删除目标缓存记录
git stash show:查看指定的缓存记录的diff内容
git stash branch:从stash内容创建新的分支
8、查看提交代码中指定更改部分代码
git diff-tree -r {hash}
git diff-tree -no-commit-id -name-only -r {hash}
9、Git bisect命令
git bisect <subcommand> <options> 使用二进制搜索查找历史记录中的哪个提交引入了错误
10、Git协助分支(开发分支策略):
Feature 分支用来做分模块功能开发,建议命名为feature-xxx,模块完成之后,会合并到 develop 分支,然后删除。
Release 分支用来做版本发布的预发布分支,建议命名为 release-xxx。例如在软件 1.0.0 版本的功能全部开发完成,提交测试之后,从 develop 检出release-1.0.0 ,测试中出现的小问题,在 release 分支进行修改提交,测试完毕准备发布的时候,代码会合并到 master 和 develop,master 分支合并后会打上对应版本标签 v1.0.0, 合并后删除自己,这样做的好处是,在测试的时候,不影响下一个版本功能并行开发。
Hotfix 分支是用来做线上的紧急 bug 修复的分支,建议命名为 hotfix-xxx。当线上某个版本出现了问题,将检出对应版本的代码,创建 Hotfix 分支,问题修复后,合并回 master 和 develop ,然后删除自己。这里注意,合并到 master 的时候,也要打上修复后的版本标签。
(参考:https://zhuanlan.zhihu.com/p/50063660)
11、如何查看分支合并信息
git branch -merged :列出以合并到当前分支的分支
git branch -no-merged:列出了尚未合并的分支