git

Git倉庫

1.創建git倉庫
(1)git init:在現有目錄下初始化倉庫,再通過git add實現對指定文件對追蹤;
(2)git clone url:克隆現有的倉庫—自動在當前目錄下創建目錄且初始化一個.git文件夾,然后將從遠程倉庫拉取下的數據放進.git文件夾,然后將最新版本的文件拷貝進工作目錄;

  1. git倉庫的工作區


    git項目的三個工作區域

    (1)工作目錄

  • 已跟蹤文件:從Git倉庫提取出文件,以供修改或使用;可通過git rm --cached xx不再跟蹤xx文件,但xx文件仍存在在本地目錄中,只是不納入版本控制;
  • 未跟蹤文件:可通過git add將其變為已跟蹤文件;
    (2)暫存區:通過git add將已修改/未跟蹤的文件從工作目錄放入暫存區;
    (3)Git倉庫:對暫存區的文件使用git commit,提交修改,保存最新版本的文件快照;

Git常見命令

1.git status [-s]


靠右邊的M表示文件被修改了未放入暫存區,靠左邊的M表示文件被修改了暫存區,??表示新添加未跟蹤的文件
  1. git add xx
  • 開始跟蹤新文件xx;
  • 將已跟蹤的修改過的文件xx放入暫存區;
  • 將合并時發送沖突的文件標記為已解決狀態;

3.git commit
(1)git commit -m ‘xx’
(1)git commit -a -m 'xx':相當于git add .+ git commit

撤銷&回滾

1.撤銷文件的修改
(1)git checkout -- <file> :撤銷對文件的修改— 將修改前的file文件覆蓋了該file,此file的任何修改將會消失;
(2)git reset HEAD <file>:撤銷暫存區的文件,取消該文件的git add操作

取消了暫存CONTRIBUTING.md文件,即變為修改但未暫存的狀態了

2.已commit但未push到遠端
(1)git commit --amend [-m 'xxx']:將這次commit與上一次commit合為一個新的commit,即commit版本號會改變,但commit次數不變;

  • 提交新的修改但不增加一條新的commit記錄;
  • 只單純更改commit的提交信息,若不寫則默認使用上次的提交信息;

(2)git reset --xx <commit-id / HEAD~n>:回退到commit-id版本/回退n個版本

  • git reset --soft <commit-id / HEAD~n>回退到指定版本的commit狀態,但保留了所有階段的git add操作
    解決提交分支錯誤的問題
  • git reset --mixed <commit-id / HEAD~n>回退到指定版本的commit狀態,但工作目錄保留了修改,將目錄中所有的修改通過git add即與--soft的指令結果一樣
  • git reset --hard <commit-id / HEAD~n>回退到指定版本的commit狀態,不保留修改,可通過git reflog找到丟失的commit找回丟失的數據

3.commit之后已push到了遠端git revert

遠程倉庫&分支

1.git remote:查看遠程倉庫—列出每一個遠程倉庫的簡寫;
(1)git remote -v:顯示簡寫+對應的url;
(2)git remote add <shortname> <url>:添加一個遠程倉庫,并為其指定一個簡寫;
(3)git remote show <shortname>:查看該shortname對應的遠程倉庫的相關信息;
(4)git remote rename x1 x2:將簡寫名x1改為x2;
(5)git remote rm xx:移除簡寫名xx對應的遠程倉庫;
2.遠程分支:(remote)/(branch) — 只要不與遠程倉庫的服務器連接,本地的遠程分支指針就不會移動;
3.拉取:本地倉庫會自動跟蹤對應的遠程分支
(1)git fetch 遠程倉庫:從指定遠程倉庫中拉取本地沒有的數據,但不會合并到本地分支上;

本地倉庫未與服務器連接

本地執行fetch后,只會更新(remote)/(branch)指針的位置

(2)git pull [遠程倉庫 遠程分支]:git fetch+git merge — 查找當前分支所跟蹤的服務器分支,從服務器抓取數據然后合并到本地分支;
(3)git pull --rebase [遠程倉庫 遠程分支]:git fetch+git rebase;

[git pull & git pull --rebase]https://www.cnblogs.com/kevingrace/p/5896706.html

4.推送:git push 遠程倉庫 本地分支:遠程分支

5.跟蹤遠程分支:git checkout -b 分支名 [remote/branch]:將遠程倉庫的分支拉取到本地分支,并建立跟蹤連接—即在該跟蹤分支上輸入git pull,git能自動識別去哪個服務器上抓取,合并到哪個分支;

6.刪除遠程分支:git push 遠程倉庫 --delete 分支名 — 刪除遠程倉庫指定的遠程分支;

git分支

1.創建分支
(1)git branch <分支名>:只是新建分支,但不切換分支;
(2)git checkout -b <分支名>:新建并切換到該分支上;
2.分支切換:git checkout <分支名>HEAD指針指向當前所在分支,其隨著commit操作自動向前移動,切換分支即切換工作目錄

不同分支對應不同的工作目錄

3.分支的合并
(1)git merge <分支名>:將指定的分支合并到所在分支上;

  • 合并沖突:兩個分支對同一文件的同一部分進行了不同的修改則會產生沖突;
    • 需要手動去解決沖突,選擇要保留的最終內容;
    • git add將其標記為沖突已解決
    • git commit完成合并提交;


      目前三個分支

      合并操作無需解決的分歧稱為“快進“,直接指針向前移動

      mater與iss53有分叉,就會新建一個節點作為合并提交

      (2)git rebase

  • 合并沖突
    • 手動解決沖突+git add <沖突文件>+git rebase --continue:先處理沖突再繼續合并;
    • 跳過:git rebase --skip
    • 取消合并:git rebase --abort


      將issue分支合并到master,最后相當于快進合并

(3)git cherry-pick <commit-id>:選擇某個分支的一個或幾個commit進行操作;

  • 應用場合
    • 把弄錯分支的提交移動到正確的地方;
    • 把其他分支的提交添加到現在的分支;
  • git cherry-pick <start-commit-id>...<end-commit-id>一次性將一個連續的時間序列內的commit進行cherry-pick操作—不包含start-commit-id的commit
  • git cherry-pick <start-commit-id>^...<end-commit-id>[左閉,右閉]的區間,即包含了start-commit和end-commit;
  • 合并沖突:手動修改沖突 + git add .+git cherry-pick --continue;

(4)區別:比如兩個抽屜A與B都裝滿了衣服,現在想把B中的衣服裝入A中,則git merge是強制性的,拿起B就倒入A里,如滿了(沖突)再一并整理;而git rebase是一件一件根據一開始放入的順序從B往A中加,如滿了(沖突)你可以選擇處理這一件再繼續加,或跳過這一件,或不再加了把A還原;

merge是沖突在最后統一處理,通過git add標記沖突已解決,git commit完成合并提交;rebase是發送沖突需要先處理再繼續合并

3.分支操作
(1)git branch:查看本地git倉庫已有的分支名+所在分支;
(2)git branch -d 分支名:刪除本地分支
(3)git branch -vv:查看所有本地分支&本地分支與遠程分支的關系


可以看到本地分支所跟蹤的遠程分支,目前所在分支上serverfix,跟蹤teamone服務器的server-fix-good分支并且領先3落后1,即服務器有一次提交還未合并到本地,本地有三次提交未推送到服務器
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • (預警:因為詳細,所以行文有些長,新手邊看邊操作效果出乎你的預料) 一:Git是什么? Git是目前世界上最先進的...
    axiaochao閱讀 1,947評論 1 8
  • 安裝Git Git的下載地址:Git官網下載地址 Git本地倉庫和命令 配置用戶 下載完Git后,右鍵會有一個Gi...
    TokyoZ閱讀 4,523評論 1 7
  • 一、基本概念: 注:對于git的分布式概念及其優點,不重復說明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大廠offer閱讀 1,442評論 0 3
  • Git 安裝和使用教程 Git介紹 分布式:Git版本控制系統是一個分布式的系統,是用來保存工程源代碼歷史狀態的命...
    無名_ff98閱讀 1,634評論 0 3
  • 還是老規矩,這篇看完后,還是學不會git版本控制的,你來砍我 是兄弟就來砍我吧!!! Git是分布式版本控制系統,...
    Zteen閱讀 3,233評論 0 6