git命令(10):git 常用操作,撤銷修改(2)


一、 創建與合並分支

1、 從master分支創建dev分支並切換到dev分支:

   git checkout master    

   git checkout -b dev
 
        

其中,git checkout -b dev 等價於:

   git branch dev    

   git checkout dev
 
        

查看本地當前的分支,分支前面帶“*”表示當前分支,剩下的分支表示本地有的分支: 

   git branch

查看遠程全部的分支,白色的表示本地有的,紅色的表示本地沒有,僅在遠程存在:

   git  branch  -a

2、修改代碼、提交代碼(當前的操作是在dev分支上進行)

   git add a.html    

   git commit -m "提交文件a.html"
 
        

3、分支合並(將dev合並到master)

   git checkout master    

   git merge dev
 
        

4、合並完成后,刪除dev分支.(刪除dev分支時,注意我們當前所在的分支不能是dev分支)

   git branch -d dev

5、刪除后,查看分支(此時看不到dev分支了)

   git branch

6、總結 :工作中經常從master創建新的分支,具體操作如下:

   git checkout master  

   git checkout -b  issues1234  

   git push origin issues1234  

   git add ..  

   git commit -m "***"    

   git push origin issues1234
 
        

注意:將本地分支branch1推到遠端的branch2操作步驟:

       git push origin branch1:branch2

7、刪除分支

   git branch -D   issues1234  //本地強制刪除分支issues1234    

   git push origin  :issues1234  //推到遠程

 

二、 解決沖突

1、發生沖突的文件

  1.    <<<<<<< HEAD

  2.    Creating a new branch is quick & simple.

  3.    =======

  4.    Creating a new branch is quick AND simple.

  5.    >>>>>>> feature1

其中,git使用<<<<<<<=======>>>>>>>標記文件中自己和別人產生沖突的部分。

<<<<<<<=======之間為自己的代碼;

=======>>>>>>>之間為別人的代碼。

如果保留自己的代碼,將別人的代碼刪掉即可。

2、沖突解決后提交

   git status
   git add ***
   git commit -m "fix conflict"
   git push origin 分支名
 
        

三、Bug分支

1、儲藏更改:將當前更改的代碼儲藏起來,等以后恢復使用

   git stash

 

2、恢復儲藏的代碼

   git stash pop //恢復的同時把stash內容刪掉
   或者
   git stash apply  //恢復stash,但是stash內容並不刪除
   git stash drop //在上面操作的基礎上,以此來刪除stash

注: git stash list //查看全部的stash列表。

3、將stash空間清空

   git stash clear
 
        

4、git stash pop 和 git stash apply 區別

原來git stash pop stash@{id}命令會在執行后將對應的stash id 從stash list里刪除,而 git stash apply stash@{id} 命令則會繼續保存stash id。

四、版本回退

1、回退至上一個版本

   git reset --hard HEAD

2、回退至指定版本

   git reset --hard  版本號

3、查看以往版本號(本地的commit)

   git reflog

4、查看各版本號及信息(所有的commit:本地commit + 其他同事的commit)

   git log

五、撤銷修改

1、撤銷修改(git add/rm 之前)

如果git add 之前修改了文件:

git checkout -- file_name
指定文件 或者 git checkout
-- .
撤銷所有

如果git add 之前刪除了文件:直接使用了rm刪除(在本地版本庫中)和上面的撤回命令一樣

git checkout -- file_name
指定文件

或者

git checkout -- .
撤銷所有

2、git add/rm 之后,還未git commit

第一步:從暫存區撤出

git reset HEAD <file>
reset 某個文件
或者

git reset HEAD .
reset 所有

第二步:如果是 git rm 的文件,需要執行下面的,把它撤回來,add 的文件不能用(用了會撤回修改,如果想撤回修改前的,也可以用下面的命令)

   git  checkout -- file_name
注:如果執行 git checkout -- . 則會吧,之前add 更改的文件也給撤回了;

3、撤銷修改 git commit -m ""  、還未執行git push

  • 1. 找到上次git commit的 id

     git log 

     找到你想撤銷的commit_id

  • 2.  git reset --hard commit_id

      完成撤銷,同時將代碼恢復到前一commit_id 對應的版本。(不保留commit 之前修改的代碼,reset之后,代碼回滾到上個版本)

  • 3. git reset commit_id 

     完成Commit命令的撤銷,但是不對代碼修改進行撤銷,可以直接通過git commit 重新提交對本地代碼的修改。(保留commit之前修改的代碼,撤銷后,代碼是修改后的狀態,還能繼續修改;)

六、對於已經push的版本,進行回退

1、第一步:

   git reset --hard 版本號 //本地回退到指定的版本
 
        

2、第二步:

   git push  -f origin dev    //將遠程的也回退到指定版本

 

七、本地同步遠程刪除的分支

   git fetch origin -p  
//用來清除已經沒有遠程信息的分支,這樣git branch -a 就不會拉取遠程已經刪除的分支了
 
        

八、刪除掉沒有與遠程分支對應的本地分支

從gitlab上看不到的分支在本地可以通過git branch -a 查到,刪掉沒有與遠程分支對應的本地分支:

   git fetch -p

九、查看遠程庫的一些信息,及與本地分支的信息

    git remote show origin
 
        

十、git stash臨時保存本地操作

1、使用git stash就可以將你當前未提交到本地(和服務器)的代碼推入到Git的棧中,這時候你的工作區間和上一次提交的內容是完全一樣的。

2、再切換到別的分支改緊急bug。

3、改完后,切到剛才的分支,使用git stash apply將以前一半的工作應用回來。

也許有的人會說,那我可不可以多次將未提交的代碼壓入到棧中?答案是可以的。當你多次使用git stash命令后,你的棧里將充滿了未提交的代碼,這時候你會對將哪個版本應用回來有些困惑,git stash list命令可以將當前的Git棧信息打印出來,你只需要將找到對應的版本號,例如使用git stash apply stash@{1}就可以將你指定版本號為stash@{1}的工作取出來,當你將所有的棧都應用回來的時候,可以使用git stash clear來將棧清空。

在這里順便提下git format-patch-n, n是具體某個數字, 例如git format-patch-1這時便會根據log生成一個對應的補丁,如果git format-patch-2那么便會生成2個補丁,當然前提是你的log上有至少有兩個記錄。

 十一、git revert、git reset和git checkout的區別

 

 

十二、git 清除緩存

清空 git緩存

 
git rm -r --cached .
git add .

git commit -m 'update .gitignore'

 

讀了下git文檔,才發現,這些東西其實很簡單,很容易理解。cached其實就是暫存區,然后一個是工作的目錄,你的工作目錄的東西做出修改時,會和緩存區進行對比,因此你git status時,會顯示出來這個差異,

因此為了使.gitignore中的內容生效,那么就刪除掉暫存區,然后將所有本地文件追蹤一下,就得到最新的暫存區文件。(用於處理 gitignore 沒有生效)

十三、git 忽略文件夾或者文件 ".gitignore"

如果 git 文件夾的根目錄下有這個文件,則直接填入進去;如果沒有的話,git根目錄新建文件 .gitignore  (和.git 在同一文件夾下面)

#忽略該后綴的文件
*.xml
*.log
*.apk

# 忽略文件(文件名相對路徑,*表示忽略文件夾下的所有文件,) 這個是注釋
data/*
debug_test/*
log/*

 

 


免責聲明!

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



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