Git學習筆記(一)

注:該筆記完全是個人在學習《廖雪峰的git教程》中自己總結的筆記,其中肯定會有不少錯誤,請讀者朋友們斧正,感謝!!
廖旭峰的官網:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

Git版本控制:

本質:對倉庫中的文件階段性修改的記錄(即版本庫)
----------若在倉庫中創(chuàng)建一個空目錄時,git是不能察覺他的存在的

svn與git:

一般:

svn 集中式的版本控制系統(tǒng),有一個中央服務器,有網才能工作
git 分布式的版本控制系統(tǒng),任何一個節(jié)點都可以當作中央服務器,斷網也可以工作

反思:

開始以為svn真的只有在有網的情況下才能工作,但是很多人說斷網也可以工作,不能人云亦云,大量查看評論

總結:

所謂的svn只能在有網的情況下可以工作,不是說不能進行開發(fā),修改文件操作,而是指不能提交版本操作(即只有中央服務器維護一套版本庫),其他節(jié)點主機只能向中央服務器提出commit請求,由中央服務器來執(zhí)行。而git是每個節(jié)點主機都擁有一個完整的版本庫,可以在本地斷網的情況下隨意commit,所有的歷史版本都會記錄在本地,最后使用push向遠程服務器提交自己的文件及版本庫

svn與git的區(qū)別:

svn:必須有中央服務器 (記錄版本庫)
git:可以沒有中央服務器(本地維護版本庫,中央服務器只是用來方便交流)
所謂不能工作,特指版本提交:
=====================================================

GIt使用

注:該筆記不太適合完全的小白,是自己學習的一個記錄;若想從0開始建議移步《廖雪峰的git教程》
(所有操作均在linux下進行)

1.安裝git:
  sudo apt-get install git    (ubuntu)
  yum install git      (redhat/centos)

2.配置git:

git config --global user.name 'yourname'
git config --global user.email 'email@example.com' 
--global 表示全局設置,這臺主機的所有git倉庫都使用該配置

3.git倉庫初嘗試:

mkdir learngit
cd learngit
git init
vi  a.txt
git add a.txt
git commit -m 'add a new file a.txt'

創(chuàng)建了一個learngit目錄,將該目錄初始化為了git倉庫(repository),并添加了一個a.txt并提交到了版本庫中

圖解:

【版本一:】


gitModel.png

【版本二:修正版】


git_2.png
git init                  (將learngit初始化為git倉庫)
git add a.txt              (將工作區(qū)中的a.txt添加到暫存區(qū)中)
git commit -m 'add a.txt'  (將暫存區(qū)中的a.txt提交到版本庫)
git reset HEAD a.txt       (將暫存區(qū)中的a.txt清除)
git checkout -- a.txt      (將工作區(qū)中的a.txt回退)
git diff a.txt             (對比工作區(qū)與緩存區(qū)中的a.txt)
git diff --cached a.txt    (對比暫存區(qū)與版本庫中的a.txt)
git diff HEAD -- a.txt     (對比工作區(qū)與版本庫中的a.txt)
git status                 (查看整個倉庫的狀態(tài))
git log                    (查看版本的信息)
git log --pretty=oneline   (單行顯示版本庫)
gti reset --hard <commitid>(切換到具體的提交commit)
git reflog                 (查看git命令記錄)

==============================================

要點:

1.在Git中,用HEAD表示當前版本,上一個版本就是HEAD^ ,上上一個版本就是HEAD^^ ,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100

=============================================

FAQ:將廖大的官網中網友們的一些經典問題搜集:
Q1:本地版本回滾了,然后想讓遠端的版本也回滾。
遠程和本地的版本庫位:a->b->c
通過git reset --hard b.id 本地:a->b  push到遠程  a->b
但是會出問題
A1:
假設一開始你的本地和遠程都是:
a -> b -> c
你想把HEAD回退到b,那么在本地就變成了:
a -> b
這個時候,如果沒有遠程庫,你就接著怎么操作都行,比如:
a -> b -> d
但是在有遠程庫的情況下,你push會失敗,因為遠程庫是 a->b->c,你的是 a->b->d
兩種方案:
1.push的時候用--force,強制把遠程庫變成a -> b -> d,大部分公司嚴禁這么干,會被別人揍一頓
做一個反向操作,把自己本地變成a -> b -> c -> d,
注意b和d文件快照內容一莫一樣,但是commit id肯定不同,
再push上去遠程也會變成 a -> b -> c -> d
簡單地說就是你無法容易地抹去遠程庫的提交信息,所以本地提交怎么都行,push前想好了

2.使用 git revert <commit_id>操作實現(xiàn)以退為進,
git revert 不同于 git reset  它不會擦除"回退"之后的 commit_id ,
而是正常的當做一次"commit",產生一次新的操作記錄,所以可以push,不會讓你再pull
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1.集中式版本控制系統(tǒng)vs分布式版本控制系統(tǒng) 集中式版本控制系統(tǒng):版本庫集中存放在中央服務器。使用時必須先從中央服...
    單純的土豆閱讀 348評論 0 0
  • Git常用語法 [TOC] Git簡介 描述 ? Git(讀音為/g?t/。)是一個開源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,937評論 0 13
  • 默認在mac下學習,只簡單記錄命令作用,根據廖雪峰大神的網站學習 先創(chuàng)建一目錄 learngit
    Dev閱讀 198評論 0 0
  • 魔力7=23 300期0135697=050[得意] 301期3457891=391[得意] 302期013459...
    洪洞魔力閱讀 458評論 2 2
  • “”我夢見我在圍紗窗,好不容易才把門和窗都圍好了,可我們家小狗輕易地從窗戶跑出去了,我看到小狗穿著花點的衣服在跟外...
    夢語心聲閱讀 530評論 0 0

友情鏈接更多精彩內容