【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)為保險起見,我們可以先切一個分支出來,保存當前版本,必然以后🈶️需要這個版本,又要重新開發

   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

 

參考

Git fetch和git pull的區別, 解決Git報錯:error: You have not concluded your merge (MERGE_HEAD exists)


我只是偶爾安靜下來,對過去的種種思忖一番。那些曾經的舊時光里即便有過天真愚鈍,也不值得譴責。畢竟,往后的日子,還很長。不斷鼓勵自己,

天一亮,又是嶄新的起點,又是未知的征程(上校19)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM