Git學習的總結

2021-09-29 13:34:33 字數 3863 閱讀 4975

git commit每次提交的都是暫存區的內容, 如果修改了但是沒有add,不會被提交。這一點說明了git管理的是修改, 而不是內容

git checkout -- filename盡量加上–, 如果不加也能完成撤銷修改,但是會列印一下資訊

updated 1 path from the index  從索引更新了乙個路徑

撤銷:修改了,沒有add: 直接使用git checkout -- filename, 可以完成撤銷

已經提交了:使用版本回退git reset --hard head^, 前提是你沒有推送

刪除: 方式有兩種,一種是手動在目錄中刪除,二種是rm bbb.txt通過命令列刪除; 刪除後就和版本庫不一致了,這時候2個選擇

從版本庫中也刪除:git rm bbb.txt從暫存區移除,然後git commit

所以說git add filenamegit rm filename有點類似,都是操作暫存區內容

誤刪,需要恢復:git checkout -- bbb.txt撤銷工作區的刪除操作(沒有add)

已經add:git reset head bbb.txt, 然後在執行第一步

已經commit:git reset --hard head^, 直接版本回退

工作區的各種撤銷操作總是git checkout ***暫存區的各種撤銷操作總是git reset filename, 然後執行第一步

提交後的各種撤銷操作總是git reset --hard head^, 直接版本回退,丟失最新版本

遠端倉庫: git是分布式。最早肯定有一台電腦是版本庫,然後其他電腦都轉殖這台電腦的版本庫,所有他們的版本庫都是一樣的,沒有主次之分

通常是找一台電腦作為伺服器,其他人都從這台電腦上轉殖原始版本,工作後把自己的版本推送過去,也可以從這台電腦上拉取別的請求

所以可以自己搭建乙個git伺服器,但是可以直接使用github,託管**,但是這個**所有人都能看到

如果不想要別人看到,要麼交錢,變成私有的;要麼就自己搭建,公司內部開發必備

如何找到.ssh目錄, 一般在c:/user/administrator/.ssh, 沒有的話就執行

ssh-keygen -t rsa -c "[email protected]"

# 然後一路回車,他會自動顯示乙個路徑,就是ssh的路徑

.ssh目錄下有兩個檔案,id_rsa(私鑰)和 id_rsa_pub(公鑰)

​ 把公鑰新增到github,這樣保證只要自己可以推送, 可以配置多個key,只要把每台電腦的key都新增到github,然後每台電腦都可以進行推送

合併操作( merge )只對對當前所在分支產生影響;無論是否存在衝突,合併之後,feature分支都不會發生變化。

衝突後,在master上修改,再add,commit,其實不管feature1和master內容是否一致,都認為解決了。感覺只是告訴你衝突,只要你手動解決成你要的內容,就認為衝突管理結束了,然後就是合併成功。其實master還是master,featur1還是feature1

主分支必須落後於分支一次操作才行, 現在解決衝突的方式,就是更新一次master,再把分支刪掉。 如果擬更新了master,繼續保持分支,再merge分支feature1,出現的局面就是本章節一開始出現的,master和分支feature1各走各路一次了,merge一下就衝突了

總結: 一般是衝突後手動解決,然後直接提交就行,然後把分支刪掉,然後在開新的分支。當然不修改直接提交他也認為你解決了衝突。這個時候對分支feature1不會有任何改變,他的指標還是指向衝突時候的內容。一般在master上merge,無論是否衝突都不會對分支造成影響。

fast forward預設這種模式,但是刪除分支後會丟失分支資訊,建議禁止,引數 no-ff

git merge --no-ff -m "merge with no-ff" dev, m表示描述資訊

master 是主分支,通常只用來發布版本,只有發布版本時候把dev分支合併過來,發布

dev 是開發分支,幹活在dev上,所有人把自己的分支朝著dev合併

每個人自己還有乙個分支,想提交就提交

關於git stash

當你在dev支線上修改**後,因為沒有寫完,所以沒有提交。這個時候如果你要切換到master,你就必須先隱藏工作區(git stash)。如果不隱藏直接切換,他會自動把你沒寫完的**直接同步到master,add之前和之後的**都會同步過去,因為是不完整的**所以處理起來很麻煩。

沒有被stage(add)或者head的檔案,是無法被 stash的。而且會顯示在各個分支裡。讓你迷惑它到底該屬於哪個分支。

必須被add過,讓git去追蹤這個新檔案, git stash保留現場

當你從bug支線修復完合併到master之後,切換到dev,這時候要先git cherry-pick 版本號, 然後在恢復隱藏區,否則各種報錯。就是說執行git cherry-pick ***x之前必須確認工作區和暫存區乾淨。同時保證bug修復分支issue-000已經被刪除了,否則衝突。

untracted:新建檔案,沒有git/commit

changes not staged for commit:曾經add/commit,但現在修改沒有add

changes to be commit: 曾經add/commit,現在修改後add,沒有commit

實驗:新建dev, 修改hello.txt,然後直接切master, master可以看到新修改的資訊,add+commit之後,切回dev,發現dev的修改消失了,而且工作區乾淨,就像沒有修改過。

修改hello.txt, 然後add(加入暫存區),再切到master,直接報錯

dev,修改hello.txt,然後stash隱藏,再切到master,沒看到新內容,回到dev,stash pop,工作區的內容又恢復了

dev,修改hello.txt,然後stash隱藏,再切到master,沒看到新內容,回到dev,stash pop,工作區的內容又恢復了

dev,修改hello.txt,先add加入暫存區,然後stash隱藏,再切到master,沒看到新內容,回到dev,stash pop,暫存區的內容被還原到工作區

dev,新增檔案index.js,然後直接切到master,可以看到這個新檔案,狀態是unstracked

開發乙個新的功能的時候最好新建乙個分支,可以在dev分支上建立

變基只是整合提交歷史,一般我們這樣做的目的是為了確保向遠端分支推送時候能夠保持提交歷史的整潔----例如向某個其他人維護的專案貢獻**時。 在這種情況下,你首先在自己的分支裡進行開發,當開發完成時你需要先將你的**變基到origin/master上,然後再向主專案提交修改。 這樣的話,該項目的維護者就不再需要進行整合工作,只需要快進合併便可。

論是通過變基,還是通過三方合併,整合的最終結果所指向的快照始終是一樣的,只不過提交歷史不同罷了。 變基是將一系列提交按照原有次序依次應用到另一分支上,而合併是把最終結果合在一起。

遠端倉庫和本地倉庫沒啥區別,純粹為了24小時開機並且交換到家的修改

Git的學習總結

git的安裝 yum y install git 安裝 git config global user.name lishaoxiao 設定機器名 git config global user.email lishaoxiao123 foxmail.com 設定機器郵箱 版本庫的建立 新建目錄 mkd...

Git 學習總結

一 建立版本庫 repository mkdir learngit 建立乙個名字為learngit的資料夾 cd learngit 進入到learngit資料夾 pwd 顯示當前目錄 git init 把這個目錄變成git可以管理的倉庫 在該目錄下編寫乙個readme.txt檔案 該目錄的子目錄也行...

Git學習總結

1.git常用命令 git init 初始化乙個目錄成倉庫 新增檔案到倉庫 git add 檔名 把檔案修改新增到stage 暫存區 可多次新增 gitcommit 提交到倉庫 把暫存區的內容提交到當前分支 git status 檢視當前倉庫中是否有修改過且未提交的 git diff 檔名 顯示當前...