【Git笔记2】必知习惯和如何版本回退
? ? ?良好的習慣會讓工作和生活如魚得水,在使用git的時候有些必知習慣和概念你要get一下,總有些許失誤,如:已經提交了不合適的修改到版本庫時還沒有把自己的本地版本庫推送到遠程,想要撤銷本次提交,或者已經push到遠程庫想要回退(撤銷)。今天我們接著上篇?【Git筆記1】本地項目與GitHub遠程倉庫互聯,趁熱打鐵,開始實操,來看看怎么處理這些問題。
簡單的必知習慣
? ? ? ?
要隨時掌握工作區的狀態,使用git status命令。
- 如果git status告訴你有文件被修改過,用git diff可以查看修改內容。
? ? ?假設在上篇readme.txt.txt的原文有如下內容:(版本1)
? ? ? Git is a versioncontrol system.
? ? ? Git is free software.
更改:(版本2)內容沒變但是修改了文件名字。git bash輸入: git status git diff? ? ?可以看到我們在master分支,與遠端的master數據共享,修改了文件名字,可以看到消息是:相當是刪除了,然后新建了一個readme.txt。
如何回退版本?
? ? ? 先瀏覽一波要用到的git命令:
git reset --hard HEAD^ //回退上個版本 git?reset?--hard?<commit_id的前幾個數字>???//回退到指定的版本git log //查看commit的歷史記錄 git?log?git?log?--pretty=oneline?//查看提交日志 git?reflog??//記錄你的每一次命令:場景1:
已經提交了不合適的修改到版本庫時,同時,你還沒有把自己的本地版本庫推送到遠程,想要撤銷本次提交。更改(版本3)并提交:Git is a distributed version controlsystem.Git is free software distributed under theGPL.? ? ?完蛋,改錯了!Git的commit好比一個快照。一旦你把文件改亂了,或者誤刪了文件,還可以從最近的一個commit恢復,然后繼續工作,而不是把幾個月的工作成果全部丟失。
想查看提交日志怎么辦?這時我們用git log命令查看:還可以使用git?log?git?log?--pretty=oneline,它比git log表達的信息量少些。
? ? ?注意:
看到的一大串類似144b8216657d的是commit id(版本號),是一個SHA1計算出來的一個非常大的數字,用十六進制表示。每提交一個新版本,實際上Git就會把它們自動串成一條時間線。如果使用可視化工具(SourceTree,有機會介紹一下怎么用,目前還是基本上用命令行,為啥?顯得高端唄,哈哈)查看Git歷史,就可以更清楚地看到提交歷史的時間線。? ? ?把readme.txt回退到上一個版本,也就是add distributed的那個版本,怎么做呢?
Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交144b8216657d...,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本是HEAD~100。我們要把當前版本append GPL回退到上一個版本adddistributed,就可以使用git reset命令:
git?reset?--hard HEAD^???????使用:cat readme.txt 查看一下。
看下log,發現沒有append GP。
如何再回去append GPL版本呢?只要上面窗口還沒有關閉,那么就可以通過那個append GPL的commit id是144b8216...,于是就可以指定回到未來的某個版本:gitreset --hard 144b?操作一波。
注意:關于HEAD的介紹。Git的版本回退速度非常快,因為Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向append GPL,然后順便把工作區的文件更新了。所以你讓HEAD指向哪個版本號,你就把當前版本定位在哪。
- 關閉了窗口,看不到commit id,還是有解決辦法的。Git提供了一個命令git reflog用來記錄你的每一次命令。快速查到commit id。
注意:
使用 --hard 參數會拋棄當前工作區的修改
使用?--soft?參數的話會回退到之前的版本,但是保留當前工作區的修改,可以重新提交
step2:為了覆蓋掉遠端的版本信息,使遠端的倉庫也回退到相應的版本,需要加上參數--force
git push origin <分支名> --force因為,如果此時使用三步走的最后一步的話,會提示本地的版本落后于遠端的版本;git?push?origin?<分支名>必知的概念
??
1、工作區在電腦里能看到的目錄,比如我的learngit文件夾就是一個工作區:2、版本庫(Repository)
工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。Git的版本庫里存了很多東西,最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。前面講了我們把文件往Git版本庫里添加的時候,是分兩步執行的:
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以,現在git commit就是往master分支上提交更改。總結一句話:需要提交的文件修改通通放到暫存區,然后,一次性提交暫存區的所有修改。大兄弟,來實踐一波,更改readme.txt(版本4)
Git is a distributedversion control system.Git is freesoftware distributed under the GPL.
Git has a mutable indexcalled stage.
然后,在工作區新增一個LICENSE文本文件(內容隨便寫)。先用git status查看一下狀態:Git清楚地告訴我們在master分支,readme.txt被修改了,而LICENSE還從來沒有被添加過到版本區,所以它的狀態是Untracked。
使用命令git add xxx,把readme.txt和LICENSE都添加后,用git status再查看一下:
現在,暫存區的狀態就變成這樣了。所以,git add命令實際上就是把要提交的所有修改放到暫存區(Stage),然后,執行git commit就可以一次性把暫存區的所有修改提交到分支。現在版本庫變成了這樣,暫存區就沒有任何內容了。? ? ??快點實踐起來吧!不要有拖延癥,現在學到就是掙到!歡迎關注小白,和小白一起變禿。
來和小伙伴們一起向上生長呀!掃描下方二維碼,添加小詹微信,可領取千元大禮包并申請加入 Python 學習交流群,群內僅供學術交流,日常互動,如果是想發推文、廣告、砍價小程序的敬請繞道!一定記得備注「交流學習」,我會盡快通過好友申請哦!👆長按識別,添加微信(添加人數較多,請耐心等待)👆長按識別,關注小詹(掃碼回復 1024 領取程序員大禮包)推薦閱讀:(點擊標題即可跳轉)總結
以上是生活随笔為你收集整理的【Git笔记2】必知习惯和如何版本回退的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Git笔记3】关于撤销、删除、恢复的那
- 下一篇: 【Git笔记1】本地项目与GitHub远