git 廖雪峰教程筆記

分布式版本控制系統(tǒng)( Distributed Version Control System,簡稱 DVCS )

面向需求筆記,只看近期工作可能要用到的內(nèi)容

  1. 創(chuàng)建版本庫
    新建目錄,git init把當前目錄變成git可以管理的倉庫

  2. 在版本庫目錄下文件添加到倉庫:git add(add 可以多次頻繁使用,全部添加完之后commit)
    把文件提交到倉庫: git commit -m '...'
    $ git log <last release> HEAD --grep feature 僅僅顯示本次發(fā)布新增加的功能。

  3. 修改文件之后
    查看git狀態(tài):git status
    顯示被修改了還沒有提交

  4. 查看修改了什么: git diff

  5. 查看修改記錄: git log --pretty=onelint
    后面的參數(shù)是整理輸出格式的

  6. 回退
    git reset --hard HEAD^
    HEAD^表示上一版本
    HEAD^^
    HEAD~100

  7. 工作區(qū),暫存區(qū)
    工作區(qū),電腦里可以看到的目錄
    版本庫(repository),工作區(qū)里有一個隱藏目錄.git, 這個不算工作區(qū),而是git版本庫,版本庫里有很多東西,包括暫存區(qū),還有g(shù)it自動創(chuàng)建的第一個分支master,和一個指向master的指針HEAD

  8. 撤銷操作

git status
On branch master
Changes not staged for commit:
//還沒有add
git status
On branch master
Changes to be committed:
//還沒有commit

總而言之:

  1. 場景1:當你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時,用命令git checkout -- filename。(可以把文件在工作區(qū)的修改全部撤銷)

  2. 場景2:當你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加到了暫存區(qū)時,想丟棄修改,分兩步,第一步用命令git reset HEAD file(把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū)),就回到了場景1,第二步按場景1操作。

  3. 場景3:已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節(jié),不過前提是沒有推送到遠程庫。

  4. 刪除文件
    先在工作區(qū)rm
    這時候git status會顯示有文件被刪除
    如果確實要刪除,git rm filename, git commit
    如果不想刪了,git checkout -- filename

  5. checkout
    版本庫里代碼替換工作區(qū)版本,“一鍵還原”

  6. 遠程倉庫
    找一臺電腦充當服務(wù)器,其他人都從這里clone代碼到自己電腦,也提交到這個服務(wù)器
    github sshkey

  7. ssh key(每臺電腦對應(yīng)一個)

  8. 創(chuàng)建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經(jīng)有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創(chuàng)建SSH Key:
    $ ssh-keygen -t rsa -C "youremail@example.com"
    你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認值即可,由于這個Key也不是用于軍事目的,所以也無需設(shè)置密碼。
    (如果一切順利的話,可以在用戶主目錄里找到.ssh
    目錄,里面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。)

  9. 在github中添加sshkey

  10. branch(重點?。?!)
    創(chuàng)建并切換到分支:git checkout -b dev
    查看當前分支:git branch/git status
    切換回master:git checkout master
    把dev合并到master(merge:合并指定分支到當前分支,古跟我說的是master合并到branch):git merge dev
    刪除分支: git branch -d <name>

  11. conflict

<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

//查看分支合并情況
$ git log --graph --pretty=oneline --abbrev-commit

如果工作只進行到一半,還沒法提交,預(yù)計完成還需1天時間。但是,必須在兩個小時內(nèi)修復(fù)該bug,怎么辦?
幸好,Git還提供了一個stash
功能,可以把當前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作:
$ git stash

多人協(xié)作

//查看遠程庫信息
git remote
git remote -v

//推送分支,把本地提交到遠程庫
git push origin master

提交有沖突,先pull把新提交的抓下來,在本地合并解決后再推送

多人協(xié)作的工作模式通常是這樣:

首先,可以試圖用git push origin branch-name推送自己的修改;

如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合并;

如果合并有沖突,則解決沖突,并在本地提交;

沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關(guān)系沒有創(chuàng)建,用命令git branch --set-upstream branch-name origin/branch-name。

這就是多人協(xié)作的工作模式,一旦熟悉了,就非常簡單。

實際情況:

本地master被污染,從本地的master上checkout的branch 也是被污染的,想修正

解決方法:
(當前所在位置是branch1)

  1. 刪掉本地master: git branck -D master
  2. pull遠程master: git pull origin master
    (pull會把所有master和所有branch都拿下來,而且不會改變當前所在位置)

到這里其實可以把現(xiàn)在branch和剛pull下來的master比較就完事了,但是我想新建分支并把之前分支廢棄

  1. 進入master分支: git checkout master
  2. 新建分支:git checkout -b branck2
  3. 可以git branch 確保自己在branch2
  4. 把先前分支branch1中做的修改merge到branch2中:git merge branch1
  5. git diff master 檢查遠程master和修改后要push文件是否都正確
最后編輯于
?著作權(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)容