基本配置
- 配置用戶名和郵箱
$ git config user.name manager
$ git config user.email manager@gmail.com
以上兩個(gè)命令會(huì)將用戶信息保存在當(dāng)前代碼倉(cāng)庫(kù)中
- 如果要配置全局的用戶名和郵箱
$ git config --global user.name manager
$ git config --global user.email manager@gmail.com
以上兩個(gè)命令會(huì)將用戶信息保存在用戶目錄下的 .gitconfig 文件中
- 查看當(dāng)前所有配置
$ git config -l
- 配置帶顏色的log別名
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
常用命令
- Log打印
git log --oneline --graph // 顯示主分支和自分支git日志
git log // 查看git的日志信息
- 查詢(xún)所有提交點(diǎn)
git reflog #回退后需要反悔的話使套,需要通過(guò)此命令查找到所有操作的提交點(diǎn)
- 查看本地添加了哪些遠(yuǎn)程分支地址
git remote -v
- 本地git倉(cāng)庫(kù)添加遠(yuǎn)程地址
git remote add origin https://xxxxxxxxxxxx.git
- 創(chuàng)建本地分支
git branch develop
- 從develop衍生出一個(gè)新分支
git checkout -b some-feature develop
- 推送本地develop分支到遠(yuǎn)程
git push -u origin develop
- 查看本地分支
git branch
- 查看本地分支和遠(yuǎn)程分支
git branch -a
- 切換分支
git checkout master// master是要切換的分支名
- 刪除本地分支
git branch -d develop// develop為要?jiǎng)h除的分支名
- 刪除遠(yuǎn)程分支
git push origin --delete develop // 一般操作是先刪除本地的分支于宙,再刪除遠(yuǎn)程的分支
- 添加所有修改的文件到暫緩區(qū)
git add .
- 查看所有文件狀態(tài)
git status
- 查看某一個(gè)文件狀態(tài)
git status [filename]
- 添加某一個(gè)文件到暫緩區(qū)
git add [file1] [file2] ... // 可以有多個(gè)
- 提價(jià)代碼到本地Git倉(cāng)庫(kù)
git commit -m "本次提交注釋" // 需要先add . 才能提交
- 修改注釋
git commit --amend
- 推送本地倉(cāng)庫(kù)代碼到遠(yuǎn)程
git push // 提交之后可以直接push
- 指定分支推送
git push origin HEAD:refs/for/branch // branch 為指定的分支
- 更新遠(yuǎn)程代碼
git pull
- fetch是將遠(yuǎn)程主機(jī)的最新內(nèi)容拉到本地睬罗,不進(jìn)行合并
git fetch origin master
- pull 則是將遠(yuǎn)程主機(jī)的master分支最新內(nèi)容拉下來(lái)后與當(dāng)前本地分支直接合并 fetch+merge
git pull origin master
- 如果遠(yuǎn)程分支是與當(dāng)前分支合并猜敢,則冒號(hào)后面的部分可以省略
git pull origin master:develop #git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
- 比較本地分支與git 主分支差異情況
git diff --stat develop origin/master
- 在沒(méi)有push之前枷遂,把項(xiàng)目恢復(fù)到最近一次commit或add的狀態(tài)
git checkout -- . // 撤銷(xiāo)所有文件的修改
git checkout -- filename.. // 撤銷(xiāo)單個(gè)文件的修改
注意如果文件修改后還在工作區(qū)的話,執(zhí)行上面命令就會(huì)回到和版本庫(kù)的狀態(tài)讳癌。如果已經(jīng)執(zhí)行add指令了又做了修改渠脉,執(zhí)行上面指令就會(huì)回到添加暫緩區(qū)后的狀態(tài),如果你已經(jīng)commit了就會(huì)回到最近一次的commit版本狀態(tài)
- 合并分支
git checkout master #先切換到master分支
git merge develop #合并分支develop和主干master档叔,合并后的提交點(diǎn)屬于主干master
注意:這里又幾個(gè)參數(shù)需要了解 默認(rèn)為
fast-forward
只是簡(jiǎn)單的把指針右移動(dòng)懂从,不過(guò)如果刪除分支的話,會(huì)丟失merge分支信息蹲蒲。–squash
把一些不必要commit進(jìn)行壓縮番甩。–no-ff
關(guān)閉fast-forward模式,在提交的時(shí)候届搁,會(huì)創(chuàng)建一個(gè)merge的commit信息缘薛,然后合并的和master分支
git merge develop
git merge develop –squash
git merge develop –no-ff
- 打本地Tag
git tag xxx
- 刪除本地Tag
git tag -d xxx
- 推送Tag到遠(yuǎn)程
git push --tags
- 刪除遠(yuǎn)程Tag
git push origin --delete xxx
版本回退
- 回退到上一次提交
git reset —head HEAD~1 // 這里的1是上一次,如果寫(xiě)2的話就是回退到上上一次提交
注意:
這里的--head
的意思為:刪除工作空間改動(dòng)代碼卡睦,撤銷(xiāo)commit宴胧,撤銷(xiāo)git add .
注意完成這個(gè)操作后,就恢復(fù)到了上一次的commit狀態(tài)表锻。
--mixed
:不刪除工作空間改動(dòng)代碼恕齐,撤銷(xiāo)commit,并且撤銷(xiāo)git add . 操作這個(gè)為默認(rèn)參數(shù),git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一樣的瞬逊。
--soft
:不刪除工作空間改動(dòng)代碼显歧,撤銷(xiāo)commit,不撤銷(xiāo)git add .
- 取消最近一次提交提交
git revert HEAD
- 撤銷(xiāo)執(zhí)行提交
git revert <commit> 可以撤銷(xiāo)指定的提交确镊, 要撤銷(xiāo)一串提交可以用 <commit1>..<commit2> 語(yǔ)法士骤。 注意這是一個(gè)前開(kāi)后閉區(qū)間,即不包括 commit1蕾域,但包括 commit2
git revert --no-commit f7742cd..551c408
然后重新提交推送到遠(yuǎn)程即可
git rebase使用
場(chǎng)景一:
我修改了代碼準(zhǔn)備推送到遠(yuǎn)端拷肌,但是由于遠(yuǎn)端有代碼更新,git提示我先pull更新代碼旨巷,我pull成功了之后巨缘,會(huì)生成一個(gè)新的提交歷史
f63ecbf Merge branch 'master' of
如果你不想分叉的話執(zhí)行下面命令
git rebase // 合并提交
git push // 推送遠(yuǎn)端
或者 pull的時(shí)候加參數(shù)
git pull --rebase
場(chǎng)景二:
不同分支之間的合并。比如你新起一個(gè)分支開(kāi)發(fā)新功能采呐,開(kāi)發(fā)完成后想合并到主分支若锁,但是這個(gè)時(shí)候主分支已經(jīng)不是之前的版本了,這個(gè)時(shí)候你合并必定會(huì)有沖突懈万。你解決完沖突后再次提交合并會(huì)成功拴清,但是提交記錄會(huì)出現(xiàn)分叉的情況。如果不想分叉執(zhí)行下面代碼
在feature分支上執(zhí)行
git rebase master // 這句命令的意識(shí)是:以master為基礎(chǔ)会通,將feature分支上的修改增加到master分支上口予,并生成新的版本。
然后失敗-解決沖突之后執(zhí)行
git add .
git rebase --continue // 通過(guò)git rebase — continue,繼續(xù)完成之前的rebase操作
然后切換到主分支master涕侈,將feather分支上的提交合并過(guò)來(lái)
git checkout master
git merge feature
最后刪除feature分支即可
git branch -d feature