git常用操作

git的核心思想是:


工作區  暫存區 分支倉庫


工作區 暫存區是全局的,和分支無關的!


分支切換隻是改變commitID而已。 內容即也是更改在分支版本庫中的


HEAD指向,MASTER 指向, 分支指向的產物。


1 克隆一個git倉庫的開發項目

git clone <git url>



給自己的倉庫命名和配置郵箱選項(這個可以省去,但是系統會提示自動給你分配用戶和郵箱,還是自己設定一下吧)


git config --global user.name "andy"
git config --global user.email "[email protected]"


如果沒有設置,系統會將你係統的用戶名(root)和root@主機名作爲郵箱

2 在該目錄下蒼創建文件,創建文件後要add commit的常用操作

git add <youfile>
git add .

git commit -m "提示標記信息"


3 要查看狀態

git status
git log -p -2  # 查看最近兩次詳細修改內容的diff,以patch補丁形式查看
git remote -v


4 發現不對要撤銷

git checkout <your file>
git checkout .
git reset <youfile>
git reset .


5 如果有分支

查看分支信息

git branch
git branch -v

新建分支

git branch <new branch>

刪除分支

git branch -d <you branch>

強制刪除 

git branch -D <you branch>

6 提交到遠程

git push origin master


7 常用工具

git mergetool

對比工作區和stage區的文件差異

git diff


8 回滾

方法一:

找到你要回滾的版本

git log --pretty=oneline   和 git log --oneline差不多

回到指定的版本號

git reset --hard a7a84e6547626f304efa2067b568f4077998030f


同步遠程倉庫

push push origin master -f



方法二:

直接切回指定的版本號:(遊離態)

git checkout a7a84e6547626f304efa2067b568f4077998030f


切回master

git checkout master



克隆一個分支到本地,本地會有一個git的項目目錄

git clone <git url>

git remote -v

git status

git remote add ops15 [email protected]:/home/ops/ops_controller

git add .   

git add -A

git add youfile

git stash

git diff

git log -p

git log -p -2

git mergetool

git branch 

git checkout

git pull origin master

git push origin master

git rm filename (等於 rm filename  git rm filename) 

git mv filename(等於 mv filename  git mv filename)


撤銷工作區的所有修改

git checkout .

撤銷工作區的指定文件的修改

git checkout <youfile>


撤銷所有的stage區域 到工作區

git reset .


查看所有分支

git branch

刪除指定分支

git branch -d <you branch>

查看各個分支的提交狀況

git branch -v

創建新分支

git branch <new branch>




【重點理解--狀態】

git status -s 簡短形式查看狀態

M 第一列字符含義,版本庫和暫存區狀態有差異

M 第二列字符含義,工作區和暫存區有差異

?? 新文件,未被跟蹤的文件


1 修改能不能直接提交? "不可以"

2 git diff   工作區和暫存區的比較

 git diff HEAD 工作區和HEAD比較

 git diff --cached 暫存區和HEAD的比較


3 將工作區的內容暫存起來--擱置問題,是各分支共享的。

git stash

git stash pop

git stash list


【重點理解-對象】

git對象

$ git log --pretty=oneline

$ git log --pretty=short --graph 

$ git log --pretty=short --graph 5c2004ee59ec0ba88715caa779853078e4b4546d

git log --pretty={raw|oneline|short} --graph 提交的版本




sha1sum 算法

head 永遠指向所在分支


#查看倉庫中的對象類型 大小 內容

git cat-file -t sha1ID

git cat-file -s sha1ID

git cat-file -p sha1ID

git-cat-file - Provide content or type and size information for repository objects


-t 查看對象的類型

-s 查看對象的大小

-p 查看對象的內容


類型:

commit

tree

parent

blob


以下四中表達方式是一樣的:

git log -1    #簡寫查看一條log記錄

git log -1 head   #查看head指向的第一條記錄

git log -1 master  #查看master中的第一條記錄

git log refs/heads/master   #查看master中的第一條記錄



git cat-file blob head:test.txt   #查看head指向的blob中test.txt中的文件內容


【重點理解-重置】

git重置(reset)  (head可上可下就 遊標的修改)


git reset

git reflog

git reflog show master

git reflog head


如果修改某一個文件(沒有git add, (已經被跟蹤了的文件)),想撤銷這次修改(確定沒有作用的文件)

git checkout filename or /dir/


如果修改某一個文件(git add過,已經暫存在暫存區),想要撤銷這次修改

git reset filename

git reset .


(git reset {--soft|--hard})  重置引用

如果已經修改某幾個文件,但是想撤銷到某個版本(本地版本庫回到要撤銷到的版本),但是當前暫存區,工作區不想撤銷

git reset --soft commitid

此時git diff head會變化


如果修改了某幾個文件也被提交暫存區了,想撤銷到某個commit(工作區和暫存區都改變),回到一個乾淨的狀態(git status 工作區 暫存區 版本庫是和commitID中的內容一致)

git reset --hard commitid


如果想撤銷到某個commit,且將暫存區同步爲某個commit中的內容,但是工作區不變

git reset --maxed commitID = git reset commitID


git log和git reflog的區別:

git log只查看提交到版本庫的記錄

git reflog 查看所有commit 或者 reset的記錄 包括已經被刪除的commit記錄


閱讀; git commit --amend 修補提交



【重點理解--checkout檢出】

切換到遊離狀態


分離頭指針(checkout 切換的是指定的commitID 而不是分支)

git checkout commitid

git branch

git reflog

git merge commitID

git log --pretty=oneline --graph  #此時會看到merge遊離的狀態圖示


切換分支的檢出


master

 commit 0b62718c50c903e3e7f6a49ced2dbffa28a9b7e9

dev

commit 0bf0d2df146f5a04aa2ae5a56ab46a54c6456893


從dev切換到master 在git merge dev====> 在log中算是一個commit提交。 git log -1   git log --pretty=oneline --graph


commit 0bf0d2df146f5a04aa2ae5a56ab46a54c6456893



【命令區別】

git add .  和  git add -A 的區別


git add . 是將本路徑下所有修改的文件和新的文件 add到暫存區(非本路徑及本路徑下的目錄文件 是不會被add到暫存區的。)

git add -A 是將本路徑下所有修改的、新增的、刪除的 更新到暫存  相當於執行(git add . git rm .)




【倉庫和裸倉庫的區別】

裸倉庫是一個不含有工作目錄的倉庫(不能執行git status的)。

初始化裸的倉庫

1. git clone --bare 遠程倉庫 目錄.git

克隆一個參考到一個裸目錄(參考)


2.git init --bare 目錄.git

將目錄倉庫爲一個裸倉庫


查看遠程倉庫的信息

git ls-remote 遠程倉庫  ?


刪除與遠程庫的關聯

git remote rm <name>

如:

git remote rm origin





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章