Git:二

Git基礎(chǔ)

通過上一篇Git:一文章,我們大體了解了創(chuàng)建倉庫,提交代碼等相關(guān)流程,本篇重點介紹git相關(guān)的基礎(chǔ)操作。

git init 初始化倉庫

創(chuàng)建一個目錄,然后在該目錄下敲入初始化代碼:

mkdir gitDir    創(chuàng)建gitDir目錄
cd gitDir       跳轉(zhuǎn)到gitDir目錄
git init        初始化倉庫
ls -a           查詢當前目錄所有文件(包括隱藏文件)

生成的.git存儲當前目錄內(nèi)容所需的倉庫數(shù)據(jù)

git status 查看倉庫狀態(tài)

輸入命令后顯示:


我們可以通過vi/touch 1.c在本目錄下新建1.c文件,也可以通過界面手動新建該文件,再輸入 git status,則顯示:


通過rm -rf 1.c或手動刪除后,又恢復(fù)之前沒有文件提交的狀態(tài)。

git add 向暫存區(qū)添加文件

暫存區(qū)是提交之前的一個臨時區(qū)域。通過 git add 1.c 把1.c添加到暫存區(qū),然后通過 git status 查看:

git commit 保存?zhèn)}庫的歷史記錄

git commit -m "日志"
可以直接 git commit ,執(zhí)行后編輯器就會打開:


提交日志的格式如下:

   行數(shù) |      內(nèi)容    |
  -----: | :-------- 
  第一行  | 用一行文字簡述提交的更改內(nèi)容 |
  |第二行  |        空格            |  
 | 第三行以后 | 記錄更改的原因和詳細內(nèi)容 |
dog bird cat
foo foo foo
bar bar bar
baz baz baz

如果不填,表示中斷提交

git log 查看提交日志

查看以往倉庫中提交的日志


可以通過 git log --pretty=short 顯示簡短日志;
可以通過 git log 目錄名/文件名 顯示對應(yīng)目錄名或文件名相關(guān)日志;
可以通過 git log -p (文件名) 查看前后提交的差別

git diff 查看更改前后的差別

查看工作樹、暫存區(qū)、最新提交之間的差別
在1.c文件中添加 #include<stdio.h> 代碼保存后,然后輸入 git diff:


將1.c加入暫存區(qū)后再執(zhí)行 git diff 由于工作樹和暫存區(qū)之間并無差別,所以不會顯示什么結(jié)果。這時執(zhí)行 git diff HEAD 可以看到差異,HEAD 是指向當前分支的最后一次提交的指針。

分支操作

master分支是Git默認創(chuàng)建的分支,所有的開發(fā)都是以master分支為中心。
分支可以使多人并行開發(fā),最后與master分支合并。

git branch 顯示分支


其中 * 表示當前所在分支,現(xiàn)在只有一個master分支

git checkout -b 創(chuàng)建切換分支


我們創(chuàng)建了feature-A分支并且切換到該分支,現(xiàn)在我們有2個分支了。改代碼和下列代碼起到相同的效果:

git branch feature-A        //創(chuàng)建分支feature-A
git checkout feature-A       //切換到feature-A分支

下面通過feature-A分支中對1.c進行編輯,如下:


添加了main函數(shù),接下來可通過 git status git add 1.c git commit -m "add main method" 等相繼操作添加到feature-A中。
通過 git checkout master 切換到master中,查看1.c文件是否有改動。我們發(fā)現(xiàn)沒有改動,可見feature-A分支的變動沒有影響主分支。
git checkout - 可以回到上一個分支

git merge 合并分支

先切換回master分支,通過 git branch 查看現(xiàn)在在什么分支。

git merge --no-ff feature-A

--no-ff表示在歷史記錄中明確記錄下本次分支合并
如果合并出現(xiàn)沖突等,后續(xù)再說怎么解決沖突。

git log --graph 圖表形式查看

具體可以在終端輸入看看。

更改提交操作

git reset 回溯歷史版本


要讓暫存區(qū)、HEAD、當前工作樹回溯到指定狀態(tài),用 git reset --hard 指定時間的哈希值
通過 git log 查找日志:

其中 commit 之后的一串字符就是哈希值

git reflog 當前倉庫執(zhí)行過的操作日志

git log 只能查看以當前狀態(tài)為終點的歷史日志,而 git reflog 可以查看當前倉庫的日志:


只要不進行垃圾回收(Garbage Collection),就可以通過日志調(diào)取近期的歷史狀態(tài)。其中前面黃色的字符串也是哈希值,哈希值只要輸入4位以上就可以了。我們可以通過哈希值回到任何歷史狀態(tài)。

解決沖突

創(chuàng)建一個分支feature-B,然后修改1.c文件,具體代碼為:

    git checkout -b feature-B  //創(chuàng)建feature-B分支
    
    //修改feature-B中1.c為:
    #include<stdio.h>
    int main(){
        printf("feature-B");
        return 0;
    }
    
    //修改master中1.c為:
    #include<stdio.h>
    int main(){
        printf("master");
        return 0;
    }

現(xiàn)在基礎(chǔ)操作都完成了,因為master和feature-B都修改了1.c文件,我們合并master和feature-B分支后提示我遇到?jīng)_突了:



打開1.c文件可以看到:



HEAD中的是當前的內(nèi)容,feature-B中的是feature-B的內(nèi)容,只要刪除其中一個就可以。然后加入到暫存區(qū),然后提交,我寫的提交日志為"fix conflict",下面會用到。

git commit --amend 修改提交信息

該命令是修改上一次提交的日志:



我已經(jīng)修改為如圖所示。

git rebase -i 壓縮歷史

在合并分支之前發(fā)現(xiàn)已提交的內(nèi)容有一些錯誤,不妨提交一個修改,把這個修改包含到前一個提交中,壓縮成一個歷史記錄。
創(chuàng)建一個分支feature-D,并修改1.c文件如圖:


然后加入暫存區(qū)和提交 git commti -am "日志" 一步完成這2步操作,我提交的日志為"add feature-D"。但是我提交后發(fā)現(xiàn)我拼寫錯誤,所以我們需要修改之后重新加入暫存區(qū)后再提交:

可以看到修改后提交,日志為"fix typo",用 git log 查看為:

可以通過 git rebase -i HEAD~2 來壓縮歷史記錄,其中fix typo本不應(yīng)該出現(xiàn)在歷史記錄中的,HEAD~2 是最近2次的提交記錄,顯示如圖所示信息:

可以通過把pick改為fixup然后保存提交,之后再用 git log 查看歷史記錄可以發(fā)現(xiàn)已經(jīng)沒有"fix typo" 等記錄了。

遠程倉庫的推送和獲取

推送至遠程倉庫

在GitHub上創(chuàng)建一個和本地倉庫相同的倉庫名,具體怎么創(chuàng)建倉庫請參考上一篇。

  1. 創(chuàng)建好遠程倉庫之后, git remote add origin git@github.com:用戶名/倉庫名.git 將它設(shè)置成本地倉庫的遠程倉庫,origin 遠程倉庫的名稱設(shè)置為該標志符
  2. git push -u origin master ,git push將本地倉庫的master的內(nèi)容推送到遠程倉庫。-u參數(shù)在推送同時將origin倉庫的master分支設(shè)置為本地倉庫當前分支的upstream(上游),以后運行g(shù)it pull從遠程倉庫獲取內(nèi)容時,本地倉庫的這個分支可以直接從origin的master分支獲取內(nèi)容,省去了另外添加參數(shù)。
    在GitHub的結(jié)果如下:

    3.也可以推送其他分支到遠程倉庫。我們試著推送feature-B到遠程倉庫

我這邊 origin 標示符,我寫的default,大家可以自己選擇。最后在GitHub上的結(jié)果為:


看,我們已經(jīng)把feature-B分支推送到GitHub上的遠程倉庫了。
oh, great!

從遠程倉庫中獲取

git clone 獲取遠程倉庫

換一個目錄,然后輸入 git clone git@github.com:用戶名/倉庫名.git 就會克隆到本地。然后輸入 git branch -a 可以查看分支,-a分支不僅可以查看本地分支也可以查看遠程的:


上面我們看到只是把master分支克隆到本地,沒有feature-B,現(xiàn)在我們獲取feature-B分支:

然后我們可以修改feature-B中1.c文件,然后:

    git add 1.c
    git commit -m "日志"
    git push              //推送到遠程倉庫

成功后可到GitHub中去查:


git pull 獲取最新遠程倉庫的分支

OK,Done!

相關(guān)

Pro Git:https://git-scm.com/book/zh/v1
LearnGitBranching:http://pcottle.github.io/learnGitBranching/

總結(jié)

至此Git相關(guān)操作都差不多介紹完了,希望通過我的介紹能讓大家對Git有基本的了解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容