1. 程式人生 > >關於Git與Github的相關操作

關於Git與Github的相關操作

請點選該連結,裡面的內容已經十分詳盡!!

以下是鄙人的一些總結:

git:

-----當安裝成功後,因為git是分散式版本控制系統,你需要執行命令來配置你的使用者名稱和郵箱:
$ git config --global user.name "superGG1990"
$ git config --global user.email "[email protected]"
注意:初次安裝git需要配置使用者名稱和郵箱,否則git會提示:please tell me who you are.

-----基本步驟:
1.先在github上新建一個遠端倉庫;
2.本地新建資料夾;
3.git init:把這個資料夾變成Git可管理的倉庫;
4.把專案貼上到工作區workspace;
5.git add 專案名:新增到暫存區index/stage,或(git add .)把該目錄下的所有檔案新增到暫存區,注意點是用空格隔開的;
6.$ git commit -m "註釋內容":把專案提交到本地倉庫repository;
7.在Github上設定好SSH金鑰。(首先$ ssh -T

[email protected]:驗證是否已經配置成功)
本地建立ssh key:$ ssh-keygen -t rsa -C "[email protected]",剩餘的步驟手動操作;

8.$ git remote add origin [email protected]:使用者名稱/倉庫名.git:將本地倉庫和遠端倉庫進行關聯;
9.$ git push (-u) origin master:將本地倉庫repository主分支master內容提交到遠端倉庫origin的master分支,由於新建的遠端倉庫是空的,所以要加上-u這個引數,等遠端倉庫裡面有了內容之後,下次再從本地庫上傳內容的時候,可去掉-u。


另外,這裡有個坑需要注意一下,就是在建立遠端倉庫的時候,如果你勾選了Initialize this repository with a README(就是建立倉庫的時候自動給你建立一個README檔案),那麼到了第九步你將本地倉庫內容推送到遠端倉庫的時候就會報一個failed to push some refs to https://github.com/guyibang/TEST2.git的錯。
這是由於你新建立的那個倉庫裡面的README檔案不在本地倉庫目錄中,這時我們可以通過以下命令先將內容合併一下:$ git pull --rebase origin master【作用:拉取遠端的檔案把本地的覆蓋,再上傳】

a.Git中從遠端的分支獲取最新的版本到本地有這樣2個命令:
  1. git fetch:相當於是從遠端倉庫獲取最新版本到本地倉庫,不會自動merge【合併】;
    首先從遠端的origin的master主分支下載最新的版本到origin/master分支上
    然後比較本地的master分支和origin/master分支的差別
    最後進行合併 。
    即:從遠端獲取最新的版本到本地的tmp分支上,之後再進行比較合併
    git fetch origin master:tmp
    git diff tmp
    git merge tmp;
  2.git pull:相當於是從遠端獲取最新版本並merge到本地;
    git pull origin master
    上述命令其實相當於git fetch 和 git merge;
    在實際使用中,git fetch更安全一些,因為在merge前,我們可以檢視更新情況,然後再決定是否合併。

b.git中checkout和pull的區別:
  1.從遠端倉庫中下載新的改動;
    git pull origin master
  2.更新本地檔案;
    git checkout file。
    pull只是單純地把遠端伺服器最新的改動更新到本地,假如本地刪除了檔案或者修改了檔案,則此操作不會更新本地的檔案。
    本地刪除了檔案或者修改了檔案,如果需要恢復,則直接從本地把檔案checkout出來就可以了,用不著從遠端伺服器上pull下來。因為,所有的歷史版本你的本地都有的。

c.git status:用於顯示工作目錄和暫存區的狀態。使用此命令能看到那些修改被暫存到了(綠色), 哪些沒有, 哪些檔案沒有被Git tracked到(紅色)。

d.master指的是分支(branch)名字。一個倉庫中預設的分支名字就是master,以後,你可以有別的branch。

 


如何操作?
-----建立版本庫:
-----版本回退:git reset --hard HEAD^(一個^,代表回退一個版本。若要回退100個版本,
則:git reset --hard HEAD~100)。
-----理解工作區和暫存區:
-----撤銷修改和刪除檔案:
-----撤銷:3種方法【直接修改再重新來過、版本回退、checkout命令】。
-----刪除:直接刪或者rm命令。想徹底刪除的話,再執行commit命令提交掉。
-----遠端倉庫:
-----配置SSH密匙;
-----遠端倉庫有了更新,如何克隆到本地倉庫?: git clone [email protected]:使用者名稱/倉庫名.git;
-----建立與合併分支:
-----master分支就是主分支。HEAD不是指向提交,而是指向master,master才指向提交。所以,HEAD指向的就是當前分支。
-----檢視當前分支:git branch;當前分支前面會新增一個星號。
-----建立分支:git branch name;
-----建立+切換分支:git checkout -b 分支名;【-b引數是指建立並切換】
-----切換分支:git checkout 分支名;

-----dev分支合併到master分支:git merge dev;
-----合併後可刪除dev分支:git branch -d dev;
-----如何解決衝突?
-----知道衝突後,手動解決衝突,然後在合併分支;
-----分支管理策略:
-----git使用"fast forward"模式,這種模式刪除分支後會丟掉分支資訊。可以使用帶引數 -no-ff 來禁用"fast forward"模式。
  Demo》合併dev分支:git merge -no-ff -m "註釋" dev;合併後刪除不會丟失分支資訊;
-----分支策略:master主分支非常穩定,用來發布新版本,一般不允許在上面幹活;幹活一般情況下在新建的dev分支上幹活,幹完後,比如要釋出或者說dev分支程式碼穩定後可以合併到主分支master上來。
-----bug分支:每個bug都可以通過一個臨時分支來修復,修復完成後,合併分支,然後將臨時的分支刪除掉。
  --比如我在開發中接到一個404 bug時候,我們可以建立一個404分支來修復它,但是,當前的dev分支上的工作還沒有提交;並不是我不想提交,而是工作進行到一半時候,我們還無法提交;Git還提供了一個stash功能,可以把當前工作現場 ”隱藏起來”,等以後恢復現場後繼續工作【git stash】。

  --確定在哪個分支上修復bug;比如我現在是在主分支master上來修復的, 現在我要在master分支上建立一個臨時分支issue-404;
  --修復完成後,切換到master分支上,並完成合並,最後刪除issue-404分支。
  --現在,我們回到dev分支上幹活了。
  --工作現場還在,Git把stash內容存在某個地方了,但是需要恢復一下,可以使用如下2個方法:
   這裡可能使用到》git stash list:列舉隱藏現場;
    1.git stash apply恢復,恢復後,stash內容並不刪除,你需要使用命令git stash drop來刪除。
    2.另一種方式是使用git stash pop,恢復的同時把stash內容也刪除了。
-----多人協作:當你從遠端庫克隆時候,實際上Git自動把本地的master分支和遠端的master分支對應起來了,並且遠端庫的預設名稱是origin。
  --要檢視遠端庫的資訊 使用 git remote;
  --要檢視遠端庫的詳細資訊 使用 git remote –v;
-----推送分支:把該分支上所有本地提交到遠端庫中,推送時,要指定本地分支,這樣,Git就會把該分支推送到遠端庫對應的遠端分支上:
  使用命令 git push origin master;
  如果我們現在要推送到其他分支,比如dev分支上,我們還是那個命令 git push origin dev;
-----那麼一般情況下,哪些分支要推送呢?
  master分支是主分支,因此要時刻與遠端同步。
  一些修復bug分支不需要推送到遠端去,可以先合併到主分支上,然後把主分支master推送到遠端去。
-----抓取分支:多人協作時,大家都會往master分支上推送各自的修改。
  --首先要把dev分支也要推送到遠端去,如下:git push origin dev;
  --克隆遠端的庫到本地來:git clone 遠端庫地址;
  --現在我們的小夥伴要在dev分支上做開發,就必須把遠端的origin的dev分支到本地來,於是可以使用命令建立本地dev分支:git checkout –b dev origin/dev;
  --小夥伴開發完成後把dev分支推送到遠端庫:add+commit+【git push origin dev】;
  --小夥伴們已經向origin/dev分支上推送了提交,而我在我的目錄檔案下也對同樣的檔案同個地方作了修改,也試圖推送到遠端庫時:推送失敗,因為我的小夥伴最新提交的和我試圖推送的有衝突,解決的辦法也很簡單,上面已經提示我們,先用git pull把最新的提交從origin/dev抓下來,然後在本地合併,解決衝突,再推送。
  --git pull也失敗了,原因是沒有指定本地dev分支與遠端origin/dev分支的連結,根據提示,
   設定dev和origin/dev的連結:git branch --set-upstream dev origin/dev;
  --這回git pull成功,但是合併有衝突,需要手動解決,解決的方法和分支管理中的 解決衝突完全一樣。解決後,提交,再push;

-----因此:多人協作工作模式一般是這樣的:
  首先,可以試圖用git push origin branch-name推送自己的修改.
  如果推送失敗,則因為遠端分支比你的本地更新早,需要先用git pull試圖合併。
  如果合併有衝突,則需要解決衝突,並在本地提交。再用git push origin branch-name推送。


注意點:
1、寫錯遠端倉庫地址可以直接到.config配置檔案中修改。

3、git checkout -- 檔名:未提交前,把檔案在工作區做的修改全部撤銷。
4、檢視做了哪些修改:git diff 檔名
5、提交修改和提交檔案是一樣的2步【git add+git commit】。
6、檢視歷史記錄:git log (--pretty=oneline:這個可以簡化檢視)
7、檢視檔案內容:cat 檔名;

 

Git基本常用命令如下:
mkdir: XX (建立一個空目錄 XX指目錄名)
pwd: 顯示當前目錄的路徑。
git init 把當前的目錄變成可以管理的git倉庫,生成隱藏.git檔案。
git add XX 把xx檔案新增到暫存區去。
git commit –m “XX” 提交檔案 –m 後面的是註釋。
git status 檢視倉庫狀態
git diff XX 檢視XX檔案修改了那些內容
git log 檢視歷史記錄
git reset --hard HEAD^ 或者 git reset --hard HEAD~ 回退到上一個版本
(如果想回退到100個版本,使用git reset –hard HEAD~100 )
cat XX 檢視XX檔案內容
git reflog 檢視歷史記錄的版本號id
git rm XX 刪除XX檔案
git remote add origin https://github.com/tugenhua0707/testgit 關聯一個遠端庫
git push –u(第一次要用-u 以後不需要) origin master 把當前master分支推送到遠端庫
git clone https://github.com/tugenhua0707/testgit 從遠端庫中克隆到本地倉庫

git checkout –b dev 建立dev分支 並切換到dev分支上
git checkout -- XX 把XX檔案在工作區的修改全部撤銷。
git checkout master 切換回master分支
git merge dev 在當前的分支上合併dev分支
git branch 檢視當前所有的分支
git branch –d dev 刪除dev分支
git branch name 建立分支

git stash 把當前的工作隱藏起來 等以後恢復現場後繼續工作
git stash list 檢視所有被隱藏的檔案列表
git stash apply 恢復被隱藏的檔案,但是內容不刪除
git stash drop 刪除檔案
git stash pop 恢復檔案的同時 也刪除檔案
git remote 檢視遠端庫的資訊
git remote –v 檢視遠端庫的詳細資訊
git push origin master Git會把master分支推送到遠端庫對應的遠端分支上