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>

相關文章
相關標籤/搜索