git學習基礎

Git學習總結

Git是目前世界上最先進的分佈式版本控制系統,版本控制是一種記錄一個或若干文件內容變化,以便將來查閱特定版本修訂情況的系統

創建一個版本庫並進行初始化,Git自動爲我們創建了唯一一個master分支
提交更改,實際上就是把暫存區的所有內容提交到當前分支

工作區與版本庫

工作區
就是你在電腦裏能看到的目錄
版本庫
工作區有一個隱藏目錄.git,就是Git的版本庫

創建版本庫

切換目錄位置 cd F:/task
顯示當前目錄位置 pwd
創建repository mkdir <file>(在工作區生成文件夾)
初始化repository git init//把這個目錄變成Git可以管理的倉庫
(初始化後,在當前目錄下會出現一個名爲.git的目錄,所有git需要的數據和資源都存放在這個目錄中,.git目錄,這個目錄默認是隱藏的,用ls -ah命令就可以看見。

工作區文件操作

cat <file>             //查看當前工作區文件具體內容
git checkout -- <file>//其實是用版本庫裏的最新版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。
rm <file>             //從工作區刪除文件

git版本庫暫存區操作

git add <file>           //添加文件到暫存區
git add -u//只會處理已修改或者已刪除的文件,但是不會處理新建的文件

git reset HEAD file //將文件的版本庫的最新版本重新放回工作區(已add)                 

git版本庫操作

保存快照到分支:git commit -m '說明' //提交更改,實際上就是把暫存區的所有內容提交到當前分支。
查看快照記錄
git log

                
git log --pretty=oneline //簡化信息,方便查看
git log --pretty=oneline --abbrev-commit

git reflog              //查看每一次commit以及reset,以便查看commit-id

版本回退:git reset --hard HEAD^ //回退到當前工作區版本的上一個版本

HEAD^:上一個版本
HEAD^^:上上一個版本
HEAD~100:上100個版本
commit-id(對應版本id)                   

從版本庫刪除文件:git rm <file>
從遠程倉庫刪除文件:先在工作區刪掉,然後git commit -a -m "A file was deleted",最後git push

文件狀態跟蹤記錄

狀態查看:git status
三種狀態
1.untraked file(工作區的文件未被跟蹤的文件)
2.changes to be commited(暫存區的文件,將要被提交的修改)
3.changes not staged for commit(沒有準備提交的修改或文件之前提交過,然後進行了修改但還未add)

文件修改查看

git diff <file>//(add提交前)//查看具體修改內容
git diff HEAD -- readme.txt//查看版本庫最新版本與工作區最新版本的區別

Git分支

每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支,所以分支就是一條commi時間線

一個項目可以對應多條分支,也可以對應一條分支

HEAD嚴格來說不是指向提交,而是指向master,master纔是指向提交的,所以,HEAD指向的就是當前分支。

創建分支並切換
一步完成:git checkout -b <name>(-b參數表示創建並切換,)

兩步完成:

git branch <name>//創建分支
git checkout <name>//切換分支到當前分支

查看分支:git branch
合併分支:

git merge <name>//合併指定分支到當前分支,fast forward模式
git merge --no-ff <name>//可以看出曾經合併過

合併分支時,加上--no-ff參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。--no-ff參數,表示禁用Fast forward
刪除分支:

git branch -d <name>
git branch -D <name>//強行刪除

查看分支合併圖

git log --graph
git log --graph --pretty=oneline --abbrev-commit//簡化信息

本地分支與遠程分支同步

git checkout -b branch-name origin/branch-name//在本地創建和遠程分支對應的分支
git branch --set-upstream branch-name origin/branch-name//建立本地分支和遠程分支的關聯

標籤管理

一個版本庫保存一個分支master,各自的版本庫保存着各自的分支,各自的主分支名稱都爲master。
發佈一個版本時,我們通常先在版本庫中打一個標籤,這樣,就唯一確定了打標籤時刻的版本。將來無論什麼時候,取某個標籤的版本,就是把那個打標籤的時刻的歷史版本取出來。所以,標籤也是版本庫的一個快照

標籤是指向某個commit的指針
打標籤:git tag <name> //默認標籤是打在最新提交的commit上

git tag <name> commit-id(可選)
git tag -a <name> -m '說明' commit-id(可選)

查看標籤git tag
查看標籤信息git show <tagname>
刪除標籤git tag -d <tagname>//(本地)

推送標籤到遠程:

git push origin <tagname>//推送單個
git push origin --tags//推送多個

遠程倉庫

遠程倉庫是指託管在網絡上的項目倉庫,可能會有好多個,其中有些你只能讀,另外有些可以寫
查看當前遠程庫列表
git remote//它會列出每個遠程庫的簡短名字
git remote -v //-v 選項,顯示對應的克隆地址
查看遠程倉庫信息
git remote show [remote-name]//查看某個遠程倉庫的詳細信息
添加遠程倉庫
git remote add [shortname] [url]
刪除遠程倉庫
git remote rm [remote-name]
遠程倉庫重命名
git remote rename [old] [new]

遠程操作

遠程引用是對遠程倉庫的引用(指針),包括分支、標籤等等。
遠程分支

git ls-remote//顯示獲得遠程引用的完整列表

本地倉庫推送至遠程庫(推送分支)
git push [remote-name] [branch-name]
推送分支,就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應遠程分支

1.git remote add origin [email protected]:murphyuwu/task0001.git//添加遠程倉庫origin

git push origin master//實際上是把當前分支master推送到遠程庫origin

2.git push -u origin master//推送當前分支master
(加上了-u參數,Git不但會把`本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令)

從遠程庫克隆倉庫到本地
從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,如圖

git clone git@github.com:murphyuwu/task0001.git

分支的創建與合併

分支創建發生的幾件事

1.創建新分支時,新分支會指向現有分支最新的commit對象,如下圖。
2.現有分支在工作區以及暫存區的狀態,新分支也擁有同樣的狀態。
3.切換到新分支工作時,會改變之前的狀態,並與新分支同步。
正因爲切換到新分支工作時,現有分支的狀態會與新分支的狀態保持同步,因此爲了避免這一狀況,可以保住現有工作區的狀態,再切換到新分支工作,此時新分支的狀態就是乾淨的

git stash             //保存當前工作現場
git stash drop        //刪除保存
git stash apply       //恢復現場,但並不刪除保存
git stash pop         //恢復現場,並刪除保存
git stash list        //查看保存工作情況

Fast Forward

$ git checkout -b dev//創建並切換分支到dev分支

$ git add readme.txt 
$ git commit -m "branch test"//dev分支向前移一步

$ git checkout maste//切換到master分支
$ git merge dev//master向前一步與dev分支合併

$ git branch -d dev//刪除dev分支


衝突修改合併

 git checkout -b feature1
 $ git add readme.txt 
 $ git commit -m "AND simple"
 $ git checkout master
 $ git add readme.txt 
 $ git commit -m "& simple"


這種情況下,Git無法執行“快速合併”,只能試圖把各自的修改合併起來,但這種合併就可能會有衝突,收到修改衝突後提交

$ git add readme.txt 
$ git commit -m "conflict fixed"

分支管理策略

1.master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面幹活;

Force “git push” to overwrite remote files
gitlab和github下fork後如何同步源的新更新
git pull——git庫版本與本地庫版本衝突總結
git push用法和常見問題分析

The difference between git reset --mixed, --soft and --hard.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章