參考答案:git merge和git rebase的區別html
這個問題一樣也須要先了解 git 倉庫的三個組成部分:工做區(Working Directory)、暫存區(Stage)和歷史記錄區(History)。git
用來撤銷代碼倉庫中的某些更改。面試
git reset 能夠將一個分支的末端指向以前的一個 commit 點。而後再下次 git 執行垃圾回收的時候,會把這個 commit 以後的 commit 都扔掉。git reset 還支持三種標記,用來標記 reset 指令影響的範圍:安全
--mixed:會影響到暫存區和歷史記錄區。也是默認選項;服務器
--soft:隻影響歷史記錄區;app
--hard:影響工做區、暫存區和歷史記錄區。fetch
注意:由於 git reset 是直接刪除 commit 記錄,從而會影響到其餘開發人員的分支,因此不要在公共分支(好比 develop)作這個操做。.net
git revert 和 git reset 的目的是同樣的,可是作法不一樣,它會以建立新的 commit 的方式來撤銷 commit,這樣能保留以前的 commit 歷史,比較安全。另外,一樣由於可能會覆蓋本地的修改,因此執行這個指令以前,你須要 stash 或者 commit 暫存區和工做區的更改。code
git checkout 能夠將 HEAD 移到一個新的分支,並更新工做目錄。由於可能會覆蓋本地的修改,因此執行這個指令以前,你須要 stash 或者 commit 暫存區和工做區的更改。server
git reset 只是把文件從歷史記錄區拿到暫存區,不影響工做區的內容,並且不支持 --mixed、--soft 和 --hard。
git checkout 則是把文件從歷史記錄拿到工做區,不影響暫存區的內容。
git revert 不支持文件層面的操做。
回答關鍵點:
/*設置用戶的姓名,用於每次的commit*/ git config - - global user.name "John Simth" /*設置用戶的郵箱,用於每次的commit*/ git config - - global user.email john@example.com
/*將現有的項目轉變爲Git倉庫或者新建一個空的倉庫*/ git init /*克隆倉庫*/ git clone '遠程倉庫地址'
/*將單個文件添加到暫存區中*/ git add 'filename' /*將當前全部文件添加到暫存區中*/ git add . /*提交文件*/ git commit -m "comment" /*添加並提交文件*/ git commit -a -m "comment"
git branch //查看全部分支 git branch <name> //建立分支 git checkout <name> //切換分支 git checkout -b <name> //建立並切換分支 git branch -d <name> //刪除分支,沒法刪除未被合併的分支 git branch -D <name> //強制刪除分支,能夠刪除未被合併的分支
git merge <branch> //將branch分支合併到當前分支,當前分支擁有branch分支的記錄,branch分支不變 git merge <branch1> <branch2> //將分支branch1合併到branch2 /*git默認使用fast-farward快合併模式,會直接將要被合併的分支指向當前分支; *可是--no-ff不會,它會建立合併點; **/ git merge --no-ff <branch> /*將兩個分支合併成一個線性的提交*/ git rebase <branch>
/** *顯示文件的狀態: staged,unstaged和untracked三種狀態 *untracked:表示版本庫中有新建立的文件,可是併爲歸入版本庫的管理中 *unstaged:將untracked狀態的文件執行 git add 命令後文件狀態就是unstaged,此時 *意味着git發現這個文件被改動了,可是改動的部分並無提交到倉庫中 *staged:表示文件已經被提交到倉庫中了 **/ git status /*顯示當前分支的commit記錄*/ git log /*以圖的形式顯示當前分支的commit記錄*/ git log --graph
/*工做區與暫存區之間的差異,即尚未添加到暫存區的修改,這裏比較的是修改內容*/ git diff /*暫存區與上一次提交的差異*/ git diff --cached /*比較兩次commit之間的差異*/ git diff <commit id1> <commit id2> /*比較兩個分支之間的差異*/ git diff <branch1> <branch2>
/*將HEAD移動到commit id對應的提交點*/ git reset <commit id> /*工做區、暫存區和歷史記錄區都會被重置commit id提交點*/ git reset --hard <commit id>
git stash //保存當前工做區和暫存區的狀態 git stash list //查看全部的stash信息 git stash apply <stash> //回覆指定stash,但不刪除該stash記錄 git stash drop <stash> //刪除指定stash git stash clear //刪除全部stash記錄
git tag <name> //給最新提交打標籤 git tag <name> <commit_hash> //給commit_hash提交打標籤 git tag //查看全部標籤 git show <name> //查看標籤信息 git checkout <tagname> //切換到標籤 git tag -d <tagname> //能夠刪除一個本地標籤 git push --tags //把本地tag push到遠端 git fetch origin tag <tagname> //獲取遠程tag git push origin --delete tag <tagname> //刪除遠程tag
git remote add origin git@server-name:path/repo-name.git git push -u origin master git push origin master