使用git進行版本管理(不斷更新中)

使用git進行版本管理

常識

  • 文件的幾個狀態:Untracked,Unmodified(已修改,此時文件在工作目錄),Modified(已暫存,此時文件在暫存區),Staged(已提交,此時文件在版本倉庫)
  • 在終端使用git 命令,需要幫助可以直接在命令后面加 -h,便可以查看命令的使用說明

文檔狀態:基本內容完成,處于細節調整中。

<a name="MljPM"></a>

一、git基礎操作

<a name="zurBZ"></a>

開始使用

<a name="EhFLr"></a>

git的基礎配置

git的基礎配置分為三個作用域

  • local:只對當前的長褲有效
  • global:對登錄用戶的所有倉庫有效
  • system:對系統的所有用戶有效

config的優先級:local>global>system

git config --global user.name 'name'
git config --global user.email 'email@email'

# 顯示git config的配置
git config --list --local
git config --list --global
git config --list --system

git config --local user.name # 僅查看user.name

# 設置,缺省等同于local
git config --local 
git config --global
git config --system

# 清除
git config --unset --local user.name
git config --unset --global user.name
git config --unset --system user.name


# git編輯器默認使用shell環境變量$EDITOR所指定的軟件。一般vim/emacs,可以使用下面命令將終端下的默認編輯器更改為vim,
git config --global core.editor vim 

<a name="67Zk9"></a>

初始化git倉庫

# 已有項目代碼,進入到項目的根目錄,在當前目錄下創建git倉庫
git init

# 無項目代碼
cd 某個文件夾
git init project # 在當前目錄下創建和項目名稱同名的文件夾
cd project

<a name="2daxB"></a>

忽略某些文件

在項目內,有些文件,比如常見的第三方依賴,或者是構建后生成的文件,他們可以通過安裝或者構建得到,對于這些文件,我們通常不將其列入我們的版本倉庫,這可以通過在項目的根目錄下添加.gitignore文件來實現。文件內容如下。

doc 將不會管理doc文件夾內的所有內容,也不管doc文件
doc/ 只不管doc文件夾內的文件

# 對于前端項目通常會添加如下的內容
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
/test/unit/coverage/
/test/e2e/reports/
selenium-debug.log

我們在使用某些IDE時通常會有插件可以幫助我們更加快捷的添加gitignore。比如Jetbrains就可以通過插件很方便的添加gitignore

<a name="llpMN"></a>

git別名

git 為了方便我們的使用,可以對常用的命令起別名,從而提升終端的使用效率

git config --global alias.co checkout
git config --global alias.unstage 'reset HEAD --'
git config --global alias.visual '!gitk'
        執行外部命令 + !

<a name="TEqOr"></a>

Git的工作流程

  1. 在目錄中添加、修改文件
  2. 將需要進行版本管理的文件放入暫存區域
  3. 將暫存區域的文件提交到Git倉庫
    <a name="2AW2s"></a>

<a name="feqvU"></a>

將文件添加到暫存區

git add . # 跟蹤當前目錄下的所有文件
git add fileA fileB #跟蹤fileA和fileB文件
git add -u # 將所有已跟蹤文件的變更添加到暫存區

<a name="S73WU"></a>

將暫存區內容提交至git倉庫

提交得commit message要盡可能得有意義,便于我們了解此次變更做了什么。否則這會其他人造成困擾,也會給我們得某些操作造成困擾,比如無法通過git reflog,知道我們得每個git操作具體做了什么

git commit

git commit -m 'message'

git commit -a -m 'message' 或 git commit -am 'message' 對于在工作區內新增加還未追蹤的文件不生效。

git commit --amend //追加提交,在不增加新的commit-id的情況下,將新修改的代碼追加到前一次commit-id中

git commit --help

<a name="oE4FV"></a>

打標簽

git 打標簽,針對的是一個commit。打標簽一般是伴隨著發版進行的,通過git標簽,我們可以更加方便的進行版本查看和回退等操作,也是非常重要的一個環節。

git tag //列出已有標簽
git tag -l 'v1.8.5'     //使用特定模板進行查找

標簽分為兩類:輕量標簽和附注標簽

git tag -a v1.4 -m 'message'

git show v1.2 可以看到標簽信息與對應的提交信息

git show [hash]

git tag v1.4    //輕量標簽

git tag -a v1.2 9fceb02     //針對于某個commit打標簽

****************** 共享, ********************
git push不會將tag推送到遠程倉庫
git push origin v1.5 // 標簽必須顯示推送

git psuh origin --tags // 推送所有

*******************  檢出  ********************
git checkout [tag] // 檢出某個tag
// 會處于分離頭指針狀態,,此時的提交不屬于任何的分支,如需要修改需要新建分支


git checkout -b version2 v2.0.0     // 在特定標簽上創建一個新分支

****************** 刪除tag **********************
git tag -d v1.4
git push origin :refs/tags/v.14

<a name="7vMKv"></a>

分支

分支對于git來說是非常重要的一個概念,我們通常會在主分支上新建新的分支進行自己的開發或者是bug修改。然后等待開發完成并驗證后,在通過合并分支,將我們的新功能或者是bug修改合并到主版本庫

git branch branchName

git branch -v #看本地的分支

git log --oneline --decorate   //查看各個分支所指的對象。

git checkout branchName

git checkout -b branchName

git log --oneline --decorate --graph --all      //輸出提交歷史,各個分支的指向及項目分支匹配情況。

git分支實質上是包含所指對象校驗和(長度為40的SHA-1值字符串)的文件。

git branch -d branchName

git branch -D branchName

git merge branchName

分支合并的結果做新的快照,自動創建一個提交指向這個新的快照。分支合并自動選取一個提交作為共同祖先,以此作為合并的基礎

分支沖突:
1.遇到沖突,Git會暫停下來,合并時可以使用git status 查看因為沖突未合并的文件,使用git merge --abort強制合并,使用git add fileName標記已解決的沖突。

git branch --merged 或 git branch --no-merged 查看已經合并或者尚未合并的分支。

沒有合并過的分支使用git branch -d branchName 刪除會失敗。


//修改分支名字,遠程的要刪除重新推
git branch -m oldName newName

<a name="jtXI6"></a>

分支開發工作流

<a name="lBQ1l"></a>

遠程分支

遠程引用是對遠程倉庫的引用(指針),包含分支標簽等等。git ls-remote顯示地獲取遠程引用的完整列表,通過git remote show(remote) 獲得遠程分支的更多信息

git branch --set-upstream branch-name origin/branch-name將本地分支與遠程分支關聯
<a name="7VDOn"></a>

<a name="duyEN"></a>

查看版本倉庫

<a name="JoKHo"></a>

查看當前狀態

查看當前git倉庫的狀態,比如說查看我們對工作區和貯存區做了什么更改,或者是我們當前處于哪一個分支都可以使用此命令。

git status
git status --short 或 git status -s //獲得緊湊的格式輸出

// ?? 新添加未跟蹤的文件。
//A 新添加到暫存區的文件
//M右邊,修改了沒有放到暫存
//M左邊,文件被修改了并放入暫存區。

<a name="bNuET"></a>

比較版本間差異

通過git的git diff命令,我們可以比較任意文件在兩個commit之間的差異。

比較暫存區域和工作目錄:git diff j f b d u 鍵控制翻頁 g G第一行,最后一行 3g 跳到第三行 /或者?+關鍵詞 上到下,下到上搜索,高亮的是匹配的 n下一個 N 上一個 輸入h幫助文檔 q退出

git diff   # 工作區和暫存區。

git diff --cached / git diff staged  # 暫存區和版本庫

git diff -- 文件名 # 具體的文件差別  可以多個文件

git diff masterA materB  # 比較任意兩個分支

git diff [old-commit] [new-commit-id] -- fileName  # git比較任意兩個commit之間的差異

<a name="XOv3r"></a>

查看提交記錄 git log

我們可以使用git log命令來查看我們對版本倉庫的歷史操作信息。

git log     # 按照時間列出所有更新,最新的在上面,列出SHA-1校驗和名字郵箱,提交時間,說明,只展示當前分支
git log -p -2   # 用來顯示每次提交的內容差異,2表示僅顯示最近兩次提交。
git log -n2   # 僅顯示最近兩次提交。
git log --stat      # 附帶總結信息,列出每次被修改的文件
git log --pretty=oneline  # 在同一行顯示
git log --oneline # 同一行顯示
git log --all # 展示所有分支的版本歷史
git log --graph # 圖形化的方式展示
git log branchName # 之查看某個分支,有all的話這個不生效

git log --pretty=format:"%h - %an, %ar : %s"
git log --since=2.weeks  //最近兩周
--author指定作者  --grep搜索提交說明中的關鍵字  如果要的到同時滿足這兩個選項的搜索條件的提交,就要用--all-match

-s 列出添加或移除了某些字符串的提交。例如
git log -Sfunction_name

--path指定路徑

git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
   --before="2008-11-01" --no-merges -- t/

git log --oneline --decorate 查看各個分支當前所指向的對象   
git log --pretty=oneline [fileName]

git log --abbrev-commit   '顯示最簡短的唯一值'

git help --web log # 通過瀏覽器查看所有

gitk  # 打開圖形化界面

<a name="ANAxu"></a>

文件操作

<a name="2XWcZ"></a>

對文件重命名

將readme重命名為readme.md

# 方法1
mv readme readme.md # 直接重命名
git add readme.md  # 添加重命名后的文件
git rm readme  # 刪除原來文件

# 方法2 git命令
git mv readme readme.md #使用git mv變更文件名

<a name="wuwRS"></a>

<a name="uUDYh"></a>

重命名文件

git mv file_from file_to

等同于
mv file_from file_to
git rm  file_from
git add file_to

<a name="XLRBw"></a>

刪除文件

git rm 文件名。刪除文件并提交,使文件不再被追蹤。

git rm 文件名 等同于 rm 文件名+git add .

如果刪除之前修改過并放入暫存區。需要-f強行刪除

git rm --cached 文件名從暫存區刪除,但保留在工作區

<a name="dE9Tl"></a>

貯藏代碼

當我們對工作區和貯存區的代碼進行了更改之后,有額外的任務插入,我們需要將現在工作區和貯存區的內容暫時的存儲起來,此時便用到了 git stash
<a name="BoxJJ"></a>

git stash

git stash
git stash list
git stash apply // 已暫存的文件不會被重新暫存
git stash apply --index // 重新暫存已暫存的文件
git stash apply stash@{2}
git stash drop  stash@{2}   //刪除儲藏
git stash pop   // 重新應用并刪除
git stash branch branchName //從最新儲藏新建分支,成功后會刪掉該儲藏
git stash save noteContent // 等同于git stash,但是可以增加注釋
git stash clear //清理所有
git stash show stash@{2} //查看stash和當前的差異

<a name="3fa4e3ad"></a>

回退與撤銷

<a name="Glw6W"></a>

撤銷操作

git commit --amend      //第二次提交代替第一次提交的結果

git reset HEAD <file>...        // 取消暫存。(不加選項只會修改暫存區內容,所以并不危險)

git checkout -- <file>

<a name="Zgtx7"></a>

暫存區恢復到頭指針的狀態

不保留暫存區的所有內容,將其恢復到跟head一樣。

  • 首先要將工作區內容 git stash
  • git reset HEAD 將暫存區的恢復到了工作區

<a name="4ilOn"></a>

將暫存區的恢復到工作區

取消工作區的變更<br />git checkout -- fileName

<a name="jvy9s"></a>

刪除歷史提交中近幾個commit

git reset --hard hash

<a name="sGHxV"></a>

代碼回退

  • 將暫存區域恢復到之前狀態:git reset HEAD 文件名,不指定為所有
  • 將暫存區的舊版本呢覆蓋回:git checkout -- 文件名
  • 回到過去:
    • 倉庫Repository和暫存區Stage之間,commit reset
    • 工作空間Working和暫存區Stage之間,add checkout
    • git reset HEAD~ ~指上一個
    • git rest --mixed(默認的不用寫) HEAD~
      • 移動HEAD指向,將其指向上一個快照
      • 將HEAD移動后指向的快照回滾到暫存區
    • git rest --soft HEAD~
      • 移動HEAD指向,將其指向上一個快照(撤銷一次錯誤的提交)
    • git rest --hard HEAD~ (存在危險性)
      • 移動HEAD指向,將其指向上一個快照
      • 將HEAD移動后指向的快照回滾到暫存區
      • 將暫存區的文件還原到工作目錄
    1. 移動HEAD的指向(--soft)
    2. 將快照混滾到暫存區域([--mixed], 默認)
    3. 將暫存區域還原到工作目錄(--hard)
    • 回滾指定快照,指定前幾個:git reset id號
    • 回滾快照里個別文件
      • git reset 快照版本 文件名/路徑
      • git reset 快照版本的ID號

<a name="44a6ae3f"></a>

遠程倉庫

git remote      // 列出遠程倉庫簡寫

git remote -v       //展示簡寫和對應的URL

git remote add <shortname> <url>

git fetch [remote-name]     //從遠程倉庫獲取數據,執行完成,會擁有遠程倉庫中所有分支的引用,可以隨時合并查看。只是將數據拉取到本地倉庫,不會合并或者修改。

git pull 會自動甚至本地的master跟蹤克隆的遠程倉庫的master

git push origin master      //寫入權限,之前別人沒有推送過。

git remote show origin 查看某個遠程倉庫的信息

git remote rename oldname newname     //修改遠程倉庫名字,也會修改你的遠程分支的名字

git remote rm 倉庫名

git clone -b [branchName] [branchName]

<a name="Ews5p"></a>

多人協作

多人協作,不能強制提交,不能變基。

<a name="uNUd8"></a>

多人修改同一個文件的文件名

會報沖突,手動解決<br />git rm 源文件名<br />git add 需要的文件名<br />git rm 分期的文件名

<a name="tZdqC"></a>

有人把文件名變更,其他人基于原來的文件名變更了文件內容。

git會自動合并。git可以很好的處理這種情況,其他的版本控制不一定能良好處理。

<a name="WdO9g"></a>

高級使用

<a name="HaVOb"></a>

git chery-pick

git chery-pick可以將某個commit復制到當前的分支。chery-pick后,處于對記錄歷史的考慮,Auther是這個commit原來的提交人,但commiter是自己。

舉例子:將branch1 的 commit1 提交 應用到 branch2 分支上來

實現步驟:

  1. 使用git log 查看需要被應用到新分支的commit的 hash是多少。
  2. 切換到branch2 git chery-pick [commit1hash]即可自動提交

chery-pick的參數:

  • 在git chery-pick后加上-n可以避免自動提交。
  • 在git chery-pick后加上-e可以編輯commit信息。
  • 與git rebase類似,當遇到沖突時有以下處理辦法, git cherry-pick --continue,git cherry-pick --abort,git cherry-pick --quit

<a name="yaelu"></a>

將commit之間得差異差異應用到新的提交

場景:branchA和branchB的差異應用到branchC<br />實現步驟

  1. git diff后增加 > patch
  2. 切換到branchC
  3. git apply patch
  4. 注意會在當前目錄下生成patch文件,需要手動刪除等操作

<a name="UMeBQ"></a>

git鉤子

通過git鉤子,可以使得我們在執行git得某些操作時,觸發一些腳本,比如在提交時校驗我們的commit message是否符合要求,才我們推送代碼到遠程前,運行我們代碼中的單元測試確保代碼質量等。

<a name="7fyKz"></a>

git忽略commit鉤子

  • git commit --no-verify ,這可以使我們得提交不觸發commit得執行。

<a name="z9FRo"></a>

使用git鉤子校驗commit message

<a name="hI1qP"></a>

git reflog

git reflog 主要記錄我們對于git得操作,通過它可以查找到所有分支的所有操作記錄,包括刪除的以及reset的內容!當我們因為不恰當得git操作,不小心將我們得代碼刪除了,我們就可以通過git reflog找回我們得代碼。git log存儲在本地。

<a name="ERvGO"></a>

不小心git reset --hard HEAD^找回

不小心將我們得代碼回退到了上個版本,找回丟失得代碼。

實現步驟:

  1. 使用git reflog找到我們不小心刪除得commit得commit hash。
  2. 使用chery-pick 找回即可

<a name="ElcKL"></a>

在分離頭指針狀態下進行了提交切換分支之后丟失代碼得找回

實現步驟與 不小心git reset --hard HEAD^找回 方法相同

<a name="rfo4w"></a>

更改git提交歷史

通過git rebase,我們可以很容易的對我們的提交歷史做更改。對提交的歷史進行修改,可能會造成代碼的沖突,我們需要解決沖突。

更改git的提交歷史是非常****危險****的操作,更改后的分支無法直接推送到遠程倉庫,****必須強制推送****,如果分支涉及到****多人協作,****需要特別注意,避免產生不必要的麻煩****。

<a name="YnqTY"></a>

通過變基來整合不同分支的修改

我們已master分支為基準開發新的功能,首先我們為了開發新的功能切出了新的分支feature1,經過一周時間,我們開發完畢。在這一周之內,其他同事也在進行正常的開發并且上線完成,合入到了master分支。此時我們需要將這一周之內其他同事對于master的更改應用到自己的feature1分支上,此時便可以通過合并分支和變基來實現,通過變基可以使我們的git提交歷史趨與一條直線。他與合并分支的明顯區別就是,合并分支,會使得我們的多次commit與這周內master變更的commit依照時間混合在一起,使用變基則會使得我們得commit順序位于master上得這些提交之后。變基操作可能會產生沖突。

# 使用合并分支
git merge master

# 使用變基
git rebase master

<a name="80kqP"></a>

修改commit的順序

  1. git rebase -i [commit-hash]
  2. 此時會出現一個編輯窗口,我們直接在編輯窗口內移動coomit的順序之后保存即可。

常用的vim快捷鍵:復制:yy, 粘貼p,回退 u ,保存wq

<a name="GsqR4"></a>

借助于git rebase,拆分commit

https://blog.csdn.net/weixin_33736832/article/details/87960663

實現步驟:

  1. git rebase -i [commit-hash]
  2. 此時會出現一個編輯器窗口,在編輯器內出現的是我們所有的commit,將要拆分的commit 前面狀態改為e,保存編輯的內容。
  3. git rebse會停留在需要拆分的commit。
  4. 此時使用 git reset HEAD^ 撤銷需要拆分的commit。
  5. 查看當前的status,此時可以按照我們的需要,添加多次提交。
  6. 我們更改玩提交后,git rebase --continue。此時我們已經成功修改了提交記錄

<a name="l8Z2a"></a>

二、Git工具

<a name="00cIU"></a>

選擇修訂版本

<a name="iDKjz"></a>

分支引用

git show [branchName]<br />
git show SHA-1

git rev-parse [branchName] 查看git當前處于什么狀態。

<a name="IqnJZ"></a>

引用日志

git reflog 查看引用日志,每當HEAD所指向的位置發生了變化,git就會將這個信息存儲到引用日志。

git show HEAD@{5}

git show master@{yesterday} 查看昨天這個分支指向了哪次提交。只對還在引用日志里的數據有用。

git log -g 查看類似于 git log 輸出格式的引用日志信息

分支引用只存在于本地倉庫,新克隆則引用日志是空的

<a name="N3X4n"></a>

祖先引用

使用HEAD^來查看上一次提交<br />
HEAD^2 D當前提交的第二次父

HEAD~ 指向第一次父提交<br />
HEAD~2 第一父提交的第一父提交

這兩種可以組合

<a name="0u7UT"></a>

提交區間

git log master..experiment  查看在experiment分支中存在而不在master分支中存在的提交。
git log origin/master..HEAD     查看即將推送到遠端的內容。

留空一邊git默認其為HEAD

<a name="N5tS2"></a>

多點

git log refA..refB
git log ^refA refB
git log refB --not refA

與雙點語法區別。

git log refA refB ^refC
git log refA refB --not refC

<a name="Tnphp"></a>

三點

選出兩個引用中只有一個包含的提交<br />
git log master...experiment<br />
增加參數 git log --left-right master...experiment

<a name="e889f8bb"></a>

交互式暫存

交互式暫存,將文件的特定部分組合成提交,修改一組文件后,希望改動可以放到若干個提交而不要混雜在一起。這可以確保提交是邏輯上獨立的變更集<br />
git add -i<br />
git add --interactive

在命令區域,可以暫存文件,取消暫存文件,暫存文件的一部分,添加未被追蹤的文件,查看暫存區內容區別。

<a name="MJa3W"></a>

暫存與取消暫存文件

<a name="ba590b6b"></a>

<a name="Nntl6"></a>

三、git基礎知識

<a name="fvGob"></a>

.git里面都有什么

  • HEAD文件存儲當前的分支,直接編輯與切換分支是同樣的效果
  • config文件存儲,針對于本文件的config
  • refs文件夾 heads對應分支 tags head內的文件存儲的是hash值, tags內的hash,hash值指的是 commit
  • objects 內的文件夾與文件夾內的文件組成hash值,使用git cat-file 查看是tree。 使用命令查看數的內容,是一個文件對象,通過git cat-file -p hsdh查看就是文件的內容
git cat-file -t hash  #命令顯示版本庫對象的內容、類型及大小信息。 看內容用-p

commit tree blob是三個核心的對象。

只要任何文件的文件內容相同,就是唯一的blob

<a name="Mr8Rz"></a>

commit tree blob 三者關系

[圖片上傳失敗...(image-acb2c9-1583609442636)]<br />一個commit對應一顆樹,樹代表了commit對應的視圖,視圖里面存儲快照,快照里放了當前commit對應的本項目倉庫的所有文件夾以及文件的快照。blob與文件名無關系。

舉例:<br />空倉庫,下有doc/readme

git add 將文件加入暫存區,那么git就會在.git/objects下創建對應文件的blob。比如 .git/objects/2d/832d90044c。使用git cat-file -t 2d832d90044c 查看可以發現類型是blob,通過git cat-file - p t2d832d90044c,可以查看到,文件的具體內容

git commit 提交后,那么git就會在.git/objects下會有4個文件.

  • 一個對象:tree 內容是doc
  • 一個對象:blob readme的文件內容
  • 一個對象:tree 里面readme文件的blob
  • 一個對象: commit

<br />
git圖2.png
git圖2.png

<a name="QZGt3"></a>

分離頭指針(detached HEAD)

變更沒有基于某個branch去做,所以進行分支切換時,在分離頭指針之上產生的commit,可能會被git當作垃圾清理掉,如果認為變更時重要的那么,一定要將變更與分支綁到一起。<br />git checkout [commitHash]<br />本質上是工作在沒有分支的狀態下,此時可以做開發,提交(通過git log可以明顯的看到HEAD沒有與分支關聯)。如果切換到新的分支,那些沒有與分支關聯的變更可能會被git當作垃圾清理掉。要對分支做變更。git checkout -b new-branch-name。

在分離頭指針時切換分支git會提示是否要為已經提交的commit建branch, git branch <new-branch-name> <commitHash>

可以利用這一特性做嘗試,當丟棄時,直接切換到別的分支即可。

<a name="9ip7C"></a>

特殊標識符HEAD

HEAD不僅可以指代新分支最后一次提交,同時HEAD還可以不跟分支掛鉤,處于分離頭指針狀態(指導某個commit上),如果新建/切換branch,HEAD指針指向新的分支。無論處于什么狀態,HEAD最終會落腳在commit。

HEAD可以指代commit。<br />git diff HEAD HEAD^ 比較這個commit和其父commit的提交。

HEAD^^ 等同于 HEAD~2

<a name="hUEe6"></a>

git的備份

可以備份到本地的其他地方。<br />協議和智能協議<br />直觀區別:啞協議傳輸進度不不可?見;智能協議傳輸可?見。<br />傳輸速度:智能協議?比啞協議傳輸速度快。

git clone --bare /User//.git ya.git 啞協議 <br />git clone --bare file:///User//.git zhineng.git 智能協議
<a name="7EArh"></a>

git remote add zhineg file:///User/**/.git<br />git push 進行遠端備份

<a name="YtZfa"></a>

<a name="tQku9"></a>

<a name="lkj6S"></a>

四、使用問題歸納

<a name="0Cv7z"></a>

本地初始化git倉庫并添加遠程倉庫

git init
git remote add origin <遠程倉庫地址>
git add .
git commit -m "注釋"
git pull --rebase origin master
git push origin master

<a name="VTDTW"></a>

<a name="pBtBm"></a>

刪除遠程分支后本地還可以通過 git branch -a看到

解決<br />https://www.cnblogs.com/taohuaya/p/10912245.html

git branch -a                   #查看所有本地分支和遠程分支
git remote show origin          #查看remote地址,遠程分支,還有本地分支與之相對應的關系等
git remote prune origin [branch] # 根據提示進行此操作,刪除本地分支的branch,這樣就可以在本地刪除遠程不存在的分支

<a name="SrcWP"></a>

git忽略已經提交的文件(.gitignore文件無效)

解決鏈接:http://www.lxweimin.com/p/e5b13480479b

方案一

git rm [ignoreFileName]
git commit -am [commit-message]  #刪除不需要的文件

.gitignore文件中添加忽略規則,提交.gitignore文件

git push [remote]

方案二

git rm -r --cachced build/*   # 都不需要可以不跟文件名
git add .
git commit -m 'commit '
git push

針對已經commit過且有改動的文件 (因為rm的是cached列表中的文件, cached列表即修改列表)

最好在創建 git倉庫的同時就創建.gitignore文件

<a name="nBAyQ"></a>

merge兩個不相干的分支

git merge -allow-unrelated-histories master orogin/master

<a name="qvuQH"></a>

五、Git可視化軟件推薦

<a name="Y9axO"></a>

六、Git學習資源推薦

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容

  • 一、基本概念: 注:對于git的分布式概念及其優點,不重復說明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大廠offer閱讀 1,440評論 0 3
  • 查看、添加、提交、刪除、找回,重置修改文件 git help # 顯示command的help git sho...
    Swiftor閱讀 2,135評論 0 2
  • Git 是目前最流行的分布式版本控制系統之一。 版本控制指的是,記錄每次版本變更的內容和時間等細節,保留各版本之間...
    神齊閱讀 1,440評論 0 7
  • Add & Commit git init 初始化一個 Git 倉庫(repository),即把當前所在目錄變成...
    冬絮閱讀 4,871評論 0 9
  • 1. GIT命令 git init在本地新建一個repo,進入一個項目目錄,執行git init,會初始化一個re...
    江邊一蓑煙閱讀 820評論 0 0