【Git】(2)---checkout、branch、log、diff、.gitignore
常用命令
一、命令
1、checkout 切換分支
git checkout 分支名 #切換分支 #如果在當前分支上對檔案進行修改之後,沒有commit就切換到另外一個分支b, 這個時候會報錯,因為沒有commit的檔案在切換分支之後會不覆蓋。所以Git 報錯提示。 git checkout -f 分支名 #強制切換到分支 #如果在當前分支上對檔案進行修改之後強制切換另一個分支,那麼當前分支修改東西直接丟棄,所以-f 引數一定一定要非常非常小心使用,一般情況下不建議使用,除非真的要強制去執行 git checkout - # 切換到上一個分支 git checkout . # 撤銷工作區中當前目錄中的所有更改
2、branch 檢視新建分支
git branch# 列出所有本地分支 git branch -r# 列出所有遠端分支 # 新建一個分支,但依然停留在當前分支 這個時候本地已經有新分支了,但遠端還沒有,只有切換到新分支push後,遠端就有了 git branch [branch-name] git checkout -b [branch]# 新建一個分支,並切換到該分支 git branch -d [branch-name]#刪除分支 已合併的分支 *不能刪除當前所在的分支 git branch -D dev#強行刪除分支分支未合併 git push origin --delete [branch-name] # 刪除遠端分支
3、log 檢視提交記錄
git log -數字#表示檢視最近幾次的提交 git log -p -2#顯示最近兩次提交的不同點 git log --author #檢視具體某個作者的提交 git log --online #輸出簡要的資訊
4、merge 合併分支
git merge [branch] #合併指定分支到當前分支
5、diff 解決衝突 製作補丁
合併分支時,如果兩個分支都對同一檔案進行修改,那麼合併的時候就會有衝突。
git diff HEAD#比較當前工作區和上一次提交時檔案的差異 git diff HEAD^ #比較上一次提交和上上次提交的檔案差異 git diff 分支名 #檢視當前分支跟指定的分支的差異 git diff 分支名1 分支名2#檢視兩個指定分支(已提交的)的差異,分支2 跟分支1的差別 git diff --name-only --diff-filter=U #檢視衝突檔案 這個太有用啦
HEAD用法
HEAD 最近一個提交
HEAD^ 上一次提交
HEAD^ ^ 上一次的 上一次的提交(倒數第三次)
HEAD^^^ 倒數 第四次的 提交
6、reset 版本回退
語法:git reset --hard 版本號 注意:回退只是在本地進行回退,遠端倉庫還是最新的,所以之後要先pull
git reset --hard HEAD^#將 Git 回退到上一個版本 也就是上上次提交的時候,這樣就可以撤銷當次提交的資訊 git reset --hard 4b2a0c8 #版本號(commit id)沒必要寫全,一般寫前七位就夠了,Git會自動去匹配。
二、.gitignore 檔案
大量與專案無關的檔案全推到遠端倉庫上,同步的時候會非常慢,且跟編輯器相關的一些配置推上去之後,別人更新也會受其影響。所以,我們使用該檔案,
對不必要的檔案進行忽略,使其不被git追蹤。
一把情況下,.gitignore檔案,在專案一開始建立的時候就建立,並推送到遠端伺服器上。這樣大家初次同步專案的時候,就是用到該檔案,避免以後,團隊
成員把與專案無關的檔案,傳到遠端伺服器上。
*.log#表示忽略專案中所有以.log結尾的檔案 123?.log#表示忽略專案中所有以123加任意字元的檔案 /error.log#表示忽略專案中根目錄中的error.log 這個檔案 src/main/test/* #表示忽略/src/main/test/目錄下的所有檔案 **/java/#匹配所有java目錄下的所有檔案 !/error.log#表示在之前的匹配規則下,被命中的檔案,可以使用!對前面的規則進行否定
對於已經提交到遠端或本地倉庫的檔案,.gitignore配置之後不會生效。我們必須先刪除本地暫存區裡的檔案,之後在加上.gitignore 檔案,最後再把變更提交到遠端倉庫上。
git rm --cached 檔名#從暫存區刪除某個檔案 git rm -rf --cached 資料夾 #表示遞迴刪除暫存區該資料夾的所有東西
三、案例
1、commit後,需要回到上一個版本,這個版本資料全部不要
(1)為保險起見,我們可以先切一個分支出來,儲存當前版本,必然以後:u6709:️需要這個版本,又要重新開發
git checkout -b [branch]
(2)先原生代碼回到上上次提交的版本
git reset --hard head^
(3) 提交原生代碼到遠端
如果你在直接add,commit後直接 git push。會報錯
err: Updates were rejected because the tip of your current branch is behind
因為遠端本地分支回滾後,版本將落後遠端分支,所以你要先pull最新的,在push,這就很尷尬,因為最近一次提交的程式碼我都不想要了幹嘛還要拉到本地
所以你只能強制提交 這是個非常危險的命令,因為它會把該版本之前commit的資料全部丟失
git push -f
2、你在master修改程式碼,卻需要把修改後程式碼推送到dev遠端分支上
(1)在master上
git add .
git commit -m "本次提交說明"
(2)切換到dev分支
git checkout dev
(3)合併master
git merge master
(4) dev分支提交程式碼 需要重新 add 和 commit
git push
我只是偶爾安靜下來,對過去的種種思忖一番。那些曾經的舊時光裡即便有過天真愚鈍,也不值得譴責。畢竟,往後的日子,還很長。不斷鼓勵自己,
天一亮,又是嶄新的起點,又是未知的征程(上校19)