Create a new repository
git init
Checkout a repository
git clone username@host:/path/to/repository
Push changes
git add . // 添加到暫存區(qū)
git commit -m "message" // 提交到倉庫區(qū)
git remote add origin <server> // 將你的倉庫連接到遠程服務(wù)器
git push origin master // 提交到遠端倉庫
Branch
git branch -a // 列出所有本地分支和遠程分支
git branch [branch-name] // 新建一個分支代嗤,但依然停留在當(dāng)前分支
git checkout -b [branch] // 新建一個分支棘钞,并切換到該分支
git branch -d [branch-name] // 刪除分支
git branch -m [name] [newname] // 重命名分支
Tag
git tag -d <tagname> // 刪除本地tag
git push origin --delete tag <tagname> // 刪除遠程tag
git push --tags // 推送tag
Revert the local repository
git reset --hard commit-id //回滾到commit-id,講commit-id之后提交的commit都去除
git reset --hard HEAD~3 //將最近3次的提交回滾
Revert the remote repository
先將本地分支退回到某個commit干毅,刪除遠程分支宜猜,再重新push本地分支
git checkout the_branch
git branch backup //備份分支
git reset --hard commit_id //回滾到the_commit_id
git push origin :the_branch //刪除遠程 the_branch
git push origin the_branch //用回滾后的本地分支重新建立遠程分支
git push origin :the_branch_backup //成功后刪除這個備份分支
忽略與恢復(fù)跟蹤
.gitignore 只會對未加入版本控制的文件有效,如果你已經(jīng)加入了而又不想提交此文件的更改,使用下列方法
git update-index --assume-unchanged /path/to/file // 忽略跟蹤
git update-index --no-assume-unchanged /path/to/file //恢復(fù)跟蹤
合并commit
git rebase -i HEAD~3
儲藏變更
經(jīng)常有這樣的事情發(fā)生,當(dāng)你正在進行項目中某一部分的工作硝逢,而你想轉(zhuǎn)到其他分支上進行一些工作姨拥。你不想提交進行了一半的工作绅喉,否則以后你無法回到這個工作點。解決這個問題的辦法就是git stash命令
git stash // 保存當(dāng)前的工作進度
git stash apply // 恢復(fù)最新保存的工作進度
為什么使用分支叫乌?
如果你在開發(fā)新功能的時候柴罐,急需修改一個 bug 怎么辦?那你要把你新功能不穩(wěn)定的代碼也部署了憨奸?顯然不可能革屠。所以要有 feature 分支來保證新功能開發(fā)的差不多的時候才能進入主分支的代碼。那你的 bug 可以隨時修改排宰。
那么,如果你有兩個 bug 是先后發(fā)現(xiàn)的,但是一個 bug 改好了需要上線塑荒,另一個還在改浑侥,怎么辦?你把改到一般的 bug 部署上線么盐类?顯然不可能寞奸。所以你需要一個 bugfix 分支,來確保 bug 改好了代碼才能回到主分支在跳。
最后蝇闭,你在開發(fā)一個新功能,到一半硬毕。突然呻引,產(chǎn)品經(jīng)理跟你說,我這有個新功能吐咳,明天上線B哂啤!怎么辦韭脊?你要把產(chǎn)品暴打一頓辭職還是明天上線新功能童谒?那你第一個一半的新功能代碼怎么辦?扔了沪羔?還是半成品部署上線饥伊?所以你需要多個 feature 分支來開發(fā)不同的新功能。
怎么樣蔫饰,主分支健壯了吧琅豆?隨時隨地可以部署了吧!
代碼回滾:Reset篓吁、Checkout茫因、Revert的選擇
命令 | 作用域 | 常用情景 |
---|---|---|
git reset | 提交層面 | 在私有分支上舍棄一些沒有提交的更改 |
git reset | 文件層面 | 將文件從緩存區(qū)中移除 |
git checkout | 提交層面 | 切換分支或查看舊版本 |
git checkout | 文件層面 | 舍棄工作目錄中的更改 |
git revert | 提交層面 | 在公共分支上回滾更改 |
git revert | 文件層面 | (然而并沒有) |