linux下設置Git


Git介紹


1.工作原理

Git是目前世界上最先進的分布式版本控制系統。

image

Workspace: 工作區
Index / Stage: 暫存區
Repository: 本地倉庫
Remote: 遠程倉庫

2.SVN與Git的最主要的區別?

SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而干活的時候,用的都是自己的電腦,所以首先要從中央服務器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,如果在局域網還可以,帶寬夠大,速度夠快,如果在互聯網下,如果網速慢的話,就納悶了。

Git是分布式版本控制系統,那么它就沒有中央服務器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

3.操作

$ git config --global user.name "ccpang"
$ git config --global user.email "ccpang96@163.com"

git config --list //查看自己的配置
git config --global credential.helper store //配置客戶端長期存儲密碼


git config --global 參數,有了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然你也可以對某個倉庫指定的不同的用戶名和郵箱。

4.創建本地倉庫

什么是本地倉庫?
英文名repository,你可以簡單的理解一個目錄,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改,刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻還可以將文件”還原”

git init    把目錄變成git可以管理的倉庫。

5.把文件添加到本地倉庫

git add readme.txt      將readme.txt文件添加到暫存區
git add -A 保存所有的修改
git add 保存新的添加和修改,但是不包括刪除
git add -U 保存修改和刪除,但是不包括新建文件
git add .  提交所有的文件夾
(index)

git commit  -m  "提交readme.txt"      把文件提交到本地倉庫(repository)

git status      查看文件的狀態

    Untracked files  這種情況出現在新建幾個文件(版本中不存在的),但是沒有提交到暫存區的的時候
    Changes not staged for commit   這種情況出現在版本已有文件遭到修改但是還沒提交到暫存區的時候
    Changes to be committed 這種情況出現在提交到暫存區之后的時候

//當文件被修改時,再次使用git status出現以下代碼
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

git diff readme.txt     查看文件修改了哪些內容
    當使用上面這個命令或者其他命令以后,再輸入命令,命令無法顯示。
    使用Backspace后退鍵刪除光標前的所有內容,然后輸入reset,然后回車
    使用git log或者git diff后,如果命令很長,則使用q退出

6.版本回退

git log     從近到遠的顯示日志  

git log --pretty=oneline       從近到遠顯示日志 每個一行

git reset --hard HEAD~1     往上回退1個版本

git reset --hard HEAD~100   往上回退100個版本

cat readme.txt          查看readme.txt文件的內容

git reflog              查看提交的版本號 

git reset --hard xxxxxxx    恢復到某個版本


7.理解工作區(workspace)與暫存區(index)的區別

工作區:就是你在電腦上看到的目錄,比如目錄下Git里的文件(.git隱藏目錄版本庫除外)。或者以后需要再新建的目錄文件等等都屬於工作區范疇。

本地倉庫(Repository):工作區有一個隱藏目錄.git,這個不屬於工作區,這是版本庫。其中版本庫里面存了很多東西,其中最重要的就是stage(暫存區),還有Git為我們自動創建了第一個分支master,以及指向master的一個指針HEAD。

我們前面說過使用Git提交文件到版本庫有兩步:

第一步:是使用 git add 把文件添加進去,實際上就是把文件添加到暫存區。

第二步:使用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支上。

8.Git撤銷文件操作

git checkout -- readme.txt         //丟棄未提交到暫存區的修改   即把在工作區做的修改全部撤銷

9.刪除文件操作

rm b.txt       刪除b.txt

git check -- b.txt     沒有commit之前,恢復b.txt文件


遠程倉庫


1.創建ssh密鑰

本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的,所以需要一點設置:

第一步:創建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果有的話,直接跳過此如下命令,如果沒有的話,打開命令行,輸入如下命令:

ssh-keygen -t rsa -C "ccpang96@163.com"

id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

存放路徑:C:\Users\Administrator\.ssh
密碼:*******

2.將本地Git倉庫與遠程倉庫關聯

git remote -v //查看git對應的遠程倉庫地址
git remote rm origin //刪除關聯對應的遠程倉庫地址
git remote -v //查看是否刪除成功,如果沒有任何返回結果,表示OK
git remote add origin https://github.com/ccpang96/LinuxGit.git //重新關聯git遠程倉庫地址
git刪除遠程倉庫文件
git rm –r –n --cached b.txt  //加上-n並不會刪除文件而是展示要刪除的文件列表
git rm -r -- cached .history //刪除文件history
git rm –r -- cached b.txt //實際刪除 暫存區文件
git commit –m “刪除b.txt”
git push origin master 
當push的是空文件夾時,這是因為文件夾是從github上clone下來的,所以得先刪除文件夾內的.git文件,

git remote add origin https://github.com/ccpang96/testgit.git
git push -u origin master
git查看本地倉庫中的文件
git ls-files

查看文件狀態
git status //查看文件狀態 紅色表示工作區中的文件需要提交 綠色表示暫存區的文件需要提交
git status –s //簡化日志輸出格式

git對比
git diff //查看工作區與暫存區的不同
git diff - -cached  //查看暫存區與本地倉庫的不同
git diff HEAD //查看工作區與倉庫區的不同


git日志觀察
git log //查看提交日志
git log - -oneline //簡潔的日志
git push -f github master //強制push

從工作區提交文件到暫存區
git add 文件夾/  //添加整個文件夾及內容
git add –A //將工作區當前目錄下的所有文件提交到暫存區
git add - -all //將工作區當前目錄下的所有文件提交到暫存區

將文件從暫存區提交到本地倉庫
git commit –m “提交說明” //將文件從暫存區添加到倉庫區,生成版本號
git commit - - amend –m “提交說明” //修改提交說明

分支管理
git branch //查看分支
git branch –d 分支名稱 //刪除分支
git branch 分支名稱 // 創建一個分支
git checkout  分支名稱 //切換分支 在當前分支的任何操作都不會影響到其他分支,除非進行了分支合並
git checkout –b 分支名稱 //創建並切換分支
git merge 分支名稱//將其他分支的名稱合並到當前分支

從遠程倉庫pull代碼到本地
git pull --rebase origin master
git fetch origin master //獲取遠端的origin/master分支
git log –p master..origin/master //查看本地master與遠端origin/master的版本差異
git merge origin/master  --allow-unrelated-histories //合並遠端分支origin/master到當前分支


使用 git push命令,實際上是把當前分支master推送到遠程

由於遠程庫是空的,我們第一次推送master分支時,加上了 –u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。推送成功后,可以立刻在github頁面中看到遠程庫的內容已經和本地一模一樣了,上面的要輸入github的用戶名和密碼如下所示:

從現在起,只要本地作了提交,就可以通過如下命令:

git push origin master

把本地master分支的最新修改推送到github上了,現在你就擁有了真正的分布式版本庫了。

3.從遠程庫克隆

git clone https://github.com/ccpang96/testgit2          從遠程庫中將testgit2克隆到本地庫

創建與合並分支


1.創建新的分支並合並

在 版本回填退里,你已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git里,這個分支叫主分支,即master分支。HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。

git checkout -b  dev    :表示創建並切換到dev分支上

相當於以下兩條命令
git branch dev      查看分支,會列出所有分支,當前分支前會添加一個星號
git checkout dev    切換到dev分支上



git merge dev       將dev分支上的內容合並到master上


git branch -d dev   刪除dev分支



在分支上對文件進行修改后,一定要add /commit,不然還只是一個本地文件。

當合並分支出現矛盾時(同時修改了文件):

Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,其中<<<HEAD是指主分支修改的內容,
fenzhi1 是指fenzhi1上修改的內容,我們可以修改下如下后保存:

git log         查看分支合並情況

2.分支管理策略

通常合並分支時,git一般使用”Fast forward”模式,在這種模式下,刪除分支后,會丟掉分支信息,現在我們來使用帶參數 –no-ff來禁用”Fast forward”模式。

首先我們來做demo演示下:

git checkout -b dev     創建一個dev分支

然后修改readme.txt內容,添加到暫存區。
切換回主分支(master)。 合並dev分支,使用命令

git merge -no-ff-m "注釋(merge with no-ff)" dev           -no-ff表示禁用fast forward

分支策略:首先master主分支應該是非常穩定的,也就是用來發布新版本,一般情況下不允許在上面干活,干活一般情況下在新建的dev分支上干活,干完后,比如上要發布,或者說dev分支代碼穩定后可以合並到主分支master上來。

這樣在dev上修改的東西,就可以合並到master上來了,可以用來push到倉庫里。

3.bug分支


在開發中,會經常碰到bug問題,那么有了bug就需要修復,在Git中,分支是很強大的,每個bug都可以通過一個臨時分支來修復,修復完成后,合並分支,然后將臨時的分支刪除掉。比如我在開發中接到一個404 bug時候,我們可以創建一個404分支來修復它,但是,當前的dev分支上的工作還沒有提交。比如如下:

git stash              把當前的工作現場隱藏起來,等以后恢復現場后繼續工作

參考鏈接

1.https://www.zhihu.com/search?type=content&q=Git%E6%95%99%E7%A8%8B
2.https://juejin.im/post/5c2ecd3e6fb9a049ef26b6c4#heading-3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM