Git詳解

Git總體理解

Git代碼管理是分佈式管理方式系統.優勢在於其極高的安全性和很是強大的分支管理.
總體流程圖.pnglinux

1. 工做區(working directory): 就是本地的代碼區,電腦能看到的目錄,就是工做區.

2. 暫存區(Index):工做區下有一個隱藏的'.git'文件,其主要做用是存儲Git自動建立的第一個master分支,還有指向master分支的HEAD指針.還有一個最重要的stage的暫存區.須要提交的文件修改統統放到暫存區,而後一次性提交到暫存區的素有修改.

3. 本地倉: 本地的我的倉庫.管理着我的的代碼的版本信息.

4. 遠程倉: 線上的倉庫.管理着推送到服務器的代碼版本.

5. 過程1: 由工做區<->暫存區

工做區->暫存區:

git add . 添加全部的修改或者git add <文件名>添加單個指定的文件修改到暫存區中.git

暫存區->工做區:
(1)git rm --cached "文件路徑" 不刪除物理文件,緊將物理文件刪除.
(2)git rm --f "文件路徑" 不只將該文件從緩存中 刪除,還將物理文件刪除(不會放到垃圾桶).
(3)git reset <版本號> 利用版本庫清空暫存區.原理:將當前分支重設(reset)到指定的 或者HEAD(默認,若是不指定commit,默認是HEAD,即最新的一次提交)
  • --hard
    git reset --hard <commit號>重設(reset)index和working directory,自從 以來在working directory中的任何改變都被丟棄,並把HEAD指向 github

  • --soft
    git reset --hard <commit號>index和working directory中的內容不做任何改變,僅僅把HEAD指向 。這個模式的效果是,執行完畢後,自從 以來的全部改變都會顯示在git status的"Changes to be committed"中 vim

6. 過程2:由暫存區<->本地倉庫

暫存區->本地倉庫
  • git commit -m '本次commit的描述'
本地倉庫->暫存區
  • git reset <版本號> 利用版本庫清空暫存區.原理:將當前分支重設(reset)到指定的 或者HEAD(默認,若是不指定commit,默認是HEAD,即最新的一次提交) xcode

  • --hard
    git reset --hard <commit號>重設(reset)index和working directory,自從 以來在working directory中的任何改變都被丟棄,並把HEAD指向 緩存

  • --soft
    git reset --hard <commit號>index和working directory中的內容不做任何改變,僅僅把HEAD指向 。這個模式的效果是,執行完畢後,自從 以來的全部改變都會顯示在git status的"Changes to be committed"中.退回到該次commit提交,可是該版本以後全部的修改都沒有了,若是想要恢復,就要試圖從還未關閉的終端中找到你想要的退回的版本號,或者用 git reflog查找你想要的commit版本號.繼續用 git reset --hard <commit號>回退 安全

7. 過程3: 由本地倉->遠程倉庫

git pushbash

在本地建立一個Git管理的項目

1.從線上拉項目到本地
git clone "項目的地址路徑"克隆一個git管理的項目到本地
2.本地項目上傳線上
git init
git remote add origin "地址url"服務器

Git上的經常使用查看操做

1.查看文本內容
cat <文件名>
2.查看git的狀態
git status會告訴你在當前的分支上git的狀況(有沒有修改,修改的文件是什麼等)
➜ learngit git:(master) git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean
3.查看更詳細的文件修改
git diff 查看全部文件的不一樣
git diff <文件名> 查看指定文件的不一樣
diff 是difference的縮寫.只能查看還未add(還沒加入到暫存區)的修改
4.查看全部的commit信息
git log
git log --pretty=oneline 更簡潔的查看log信息(只有commit號和描述信息)
5.查看全部的git操做過的命令,能夠找到刪除了的commit號
git reflog
6.查看分支合併圖
git log --graph網絡

衝突處理

1 + 1 = 2 這個區間內的內容是當前開發者修改的

2 =======

1 + 2 = 3 這個區間內的內容是其餘開發者修改的

3 >>>>>>>

須要人工判斷具體是刪除或者保留哪個修改內容.而且把1,2,3行提示刪除掉.

Git分支操做

分支基本操做

1.分支的建立和切換

  • git branch "分支名" 建立一個分支 git checkout "分支名" 切換到該分支
  • 建立並切換到該分支 git checkout -b "分支名"

2.列出全部的分支

  • git branch 用*標記當前的分支
  • git branch -a 列出遠程分支

3.合併分支

  • git merge "分支名"合併指定分支到當前分支
  • git rebase "分支名"合併指定分支到當前分支
    二者的區別在於會不會保留分支操做的記錄,前者記錄,後者不記錄.建議用merge

4.刪除分支

  • 刪除本地分支: git branch -d "分支名"
  • 強制刪除本地分支: git branch -D "分支名"
    若是提示the branch XXX is not fully merged(XXX分支有沒有合併到當前分支的內容)
  • 刪除遠程分支: git push origin :<分支名> (危險命令哦)

5.本地新建了一個分支要推送到線上,須要設置關聯或者追蹤.

  • 第一次push: git push origin 本地分支名:遠程分支名

6遠程端生成了一個新的分支,拉取到本地.

  • 先關聯遠程端分支到本地: git branch --set-upstream-to=origin/<線上分支名> <本地分支名>
  • 而後git pull

bug分支

用issue做爲分支的開頭標記,當有一個bug出現須要改的時候,先拉取一個issue分支,修改併合併到開發分支上,而後刪除issue分支.

feature分支

  • 開發新的功能的時候,最好拉去一個新的分支,以feature開頭.
  • 丟掉一個沒有合併過的分支,即刪除分支.(當新功能正在或者已經開發完,領導忽然說不要了...心累)
    git branch -D <分支名> 強制刪除該分支內容

暫存的使用

1.git stash 暫存
2.git stash list 查看全部的暫存
3.git stash apply 從暫存開始執行,可是stash內容不會刪除.
4.git stash drop 刪除暫存
5.git stash pop 恢復暫存的同時刪除暫存
6.git stash apply stash@{0}恢復指定的暫存

遠程倉的操做

1.查看遠程倉的信息
git remote
git remote -v 顯示更詳細的信息
2.將分支推送到遠程倉
git push origin 本地分支名:遠程分支名

標籤的使用

1.git tag <name>新建一個標籤
2.git tag -a <name> -m "指定的標籤信息"
3.git show <tag名字> 查看詳細的tag信息
4.git tag 查看全部的tag名字
5.git tag -d <標籤名字>刪除一個標籤
6.git push origin <標籤名>推送標籤到遠程
7.git push origin --tags一次性推送全部未推送的標籤
8.刪除遠程倉上的tag

  • 先刪除本地的標籤: git tag -d <tag名字>
  • 而後刪除遠程端的標籤: git push origin :refs/tags/<tag名字>

.gitignore的使用

iOS 用到的.gitignore https://github.com/github/gitignore/blob/master/Objective-C.gitignore
在工做區建立一個名字爲.gitignore文件.把要忽略的文件名字填進去,並提交到Git.Git會自動忽略這些文件的修改.把連接中的內容信息copy到.gitignore文件中.

記住必定要把.gitignore拉取到具體的分支上纔有用.

  • git check-ignore 檢查ignore內容

  • git add -f <文件名>即便在gitignore中文件,也能夠提交.

  • UserInterfaceState.xcuserstate 的屏蔽
    在. gitignore文件中加入UserInterfaceState.xcuserstate.在終端中輸入git rm --cached <你的工程名字>.xcodeproj/project.xcworkspace/xcuserdata/<該電腦用戶名>字.xcuserdatad/UserInterfaceState.xcuserstate
    而後add,commit,push等操做.

Git 配置全局信息

1.配置做者名稱
git config --global user.name "Your Name"
2.配置我的郵箱
git config --global user.email "email@example.com"
3.配置git的顏色(文件名會標記上顏色)
git config --global color.ui true

Git上須要注意的單詞

  • repository 倉庫
  • software 軟件
  • mode 模式,風格
  • insertion 插入
  • commit 把...託給
  • stage 原意:舞臺,Git中是暫存區的意思.
  • checkout 檢出
  • branch 分支
  • modified 改進的,修改的
  • unstaged 還未加入到暫存區的 un + stage(暫存區)
  • untracked 無足跡的,尚未加入git管理的
  • origin 起源,起點
  • reset 重設
  • rebase
  • merge 合併
  • remote 遙遠的,遠程的
  • HEAD 表示當前版本
  • HEAD^ 上一個版本
  • HEAD^^ 上兩個版本
  • HEAD~100 上100個版本

Linux的一些簡單操做和一些符號的解釋

命令操做

  1. 目錄/文件的操做
  • mkdir "目錄名" 在當前路徑下建立一個文件夾
  • mvdir "目錄1" "目錄2" 移動或者重命名一個目錄 (若是目錄2不存在,就直接修改目錄1的名稱爲目錄2)
  • rmdir "目錄名" 刪除一個目錄
  • touch 建立一個文件
  • vim "文件名 編輯文件,若是文件不存在,就建立並進入編輯.
  • 刪除一個文件
    sudo rm -rf <文件名> 在上帝權限下刪除,能夠刪除一個該用戶沒有權限的文件(包括系統文件),不建議使用
    rm <文件名>能刪除當前用戶權限下的文件
  1. 轉換目錄
  • cd + "路徑" 進入該文件目錄下(也能夠將文件直接拖進來)
  • cd .. 回到上級目錄
  • cd . 當前目錄 cd / 回到根目錄
  • cd test.rtf 不可用. 不能cd到文件裏.只能cd到目錄.
    報錯信息: -bash: cd: test.rtf: Not a directory
  1. 拷貝/移動/刪除
    cp "須要拷貝的文件路徑" "目標地址路徑"
    拷貝文件 例如: cp /Users/goulela/Desktop/test.rtf /Users/goulela/Desktop/文件夾2
    mv "須要移動的文件路徑" "目標地址路徑"
    移動文件 例如: mv 文件夾2 /Users/goulela/Desktop/建立文件夾/文件夾
  2. 顯示操做
  • file "文件名" 顯示文件的類型
  • wc "文件名" 統計文件的字符數,詞數,行數

  • pwd 查看當前所在的目錄

  • ls 顯示當前路徑下有什麼文件
  • ls + "目錄名" 顯示特定的路徑下有什麼文件
  • ls -w 顯示中文
  • ls -l 詳細信息
  • ls -a 顯示全部文件,包括隱藏文件
  1. 時間操做
  • date 顯示系統的當前日期和時間
  • cal 顯示日曆
  1. 網絡與通訊
  • ping "url" 給一個遠程主機發送 迴應請求
  • 終止ping打印 control + c
  • who 列出當前登陸的全部用戶
  • whoami 顯示當前正進行操做的用戶名

符號解釋

  1. -r 就是向下遞歸,無論有多少級目錄,一併刪除
  2. -f 就是直接強行刪除,不做任何提示的意思
  3. -rf 向下遞歸強制刪除
相關文章
相關標籤/搜索