git面试题

http://www.javashuo.com/article/p-zhqwaggj-cv.htmlgit

git add == git stage 安全

  • 工做区(Working Directory)、暂存区(Stage)和历史记录区(History)以及转换关系不能少;
  • git stage 是 git add 的同义指令;

 

git reset、git revert 和 git checkout 有什么区别

  • git reset 能够将一个分支的末端指向以前的一个 commit。而后再下次 git 执行垃圾回收的时候,会把这个 commit 以后的 commit 都扔掉。git reset 还支持三种标记,用来标记 reset 指令影响的范围:post

    • --mixed:会影响到暂存区和历史记录区。也是默认选项;
    • --soft:只影响历史记录区;
    • --hard:影响工做区、暂存区和历史记录区。

    注意:由于 git reset 是直接删除 commit 记录,从而会影响到其余开发人员的分支,因此不要在公共分支(好比 develop)作这个操做。spa

  • git checkout 能够将 HEAD 移到一个新的分支,并更新工做目录。由于可能会覆盖本地的修改,因此执行这个指令以前,你须要 stash 或者 commit 暂存区和工做区的更改。插件

  • git revert 和 git reset 的目的是同样的,可是作法不一样,它会以建立新的 commit 的方式来撤销 commit,这样能保留以前的 commit 历史,比较安全。另外,一样由于可能会覆盖本地的修改,因此执行这个指令以前,你须要 stash 或者 commit 暂存区和工做区的更改。

而后,从文件层面来讲:code

  • git reset 只是把文件从历史记录区拿到暂存区,不影响工做区的内容,并且不支持 --mixed、--soft 和 --hard。
  • git checkout 则是把文件从历史记录拿到工做区,不影响暂存区的内容。
  • git revert 不支持文件层面的操做。
Git Flow, git提供了flow命令的,来作这种状态流转,不过实际使用时仍是须要有研发平台来支持一下, jenkins可能有插件配合,不过通常是和代码库在一块儿,毕竟要操做代码。 各类状态转换,代码的merge和cherry pick之类的
master、develop、release三合一就是分支开发主干发布
 

master和develop二合一而且不使用feature就是主干开发分支发布blog

 
PR, MR: pull request/ merge request,  fork/branch, another repository/ same repository
想在某个稳定版本上,添加一个刚开发完成的版本中的功能。就可使用 Cherry-pick 命令,将这个功能相关的 commit 提取出来,合入稳定版本的分支上。

git cherry-pick <commit-id>开发

git cherry-pick -x <commit_id>get

增长 -x 参数,表示保留原提交的做者信息进行提交。jenkins

在 Git 1.7.2 版本开始,新增了支持批量 cherry-pick ,就是能够一次将一个连续的时间序列内的 commit ,设定一个开始和结束的 commit ,进行 cherry-pick 操做。

git cherry_pick <start-commit-id>…<end-commit-id>

能够看到,它的范围就是 start-commit-id 到 end-commit-id 之间全部的 commit,可是它这是一个 (左开,右闭] 的区间,也就是说,它将不会包含 start-commit-id 的 commit。

而若是想要包含 start-commit-id 的话,就须要使用 ^ 标记一下,就会变成一个 [左闭,右闭] 的区间,具体命令以下。

git cherry-pick <start-commit-id>^...<end-commit-id>

相关文章
相关标签/搜索