1. 程式人生 > >git的使用小結

git的使用小結

2017 .11.24
首先,A得有一個github上的賬戶,如沒有請先註冊申請,然後安裝git操作工具,如下面圖中所示
在這裡插入圖片描述
1. 登陸你的github,然後找到A要參與的專案P,點進專案中你會看見 watch,star,fork,那麼這分別是什麼意思呢?

(1)想拷貝別人專案到自己帳號下就fork一下。
fork 的作用是參與,目的是你增加新的內容,然後 Pull Request,把你的修改和主倉庫原來的內容合併

(2)持續關注別人專案更新就star一下
star 的作用是收藏,目的是方便以後查詢

(3)watch 的作用是關注,目的是等作者更新的時候,你可以收到通知。
點選fork一下,這樣就將原專案弄到A的github倉庫中了,這樣這個專案就是你自己的了
在這裡插入圖片描述

  1. 那麼A修改後,如何提交給B呢,首先,修改fork過來的程式碼,A修改完後將其push到P1,然後點選pull request按鈕,如圖中2所示
    在這裡插入圖片描述

  2. 點進去,注意下面圖中的倉庫順序別弄錯了
    在這裡插入圖片描述

  3. 然後一次commit 直到請求完成,這樣B就會在pull request那看見一個請求,就是A的請求,具體顯示地方在下面圖中所示
    在這裡插入圖片描述

  4. B可以選擇將A的pull 請求合併merge或是其他處理

  5. 7
    當B自己修改了程式碼,A想同步B中的程式碼時,一樣由A發出pull request請求,注意倉庫的順序即可,此過程和第四步中的相反


如何修改呢?

(1)修改檔案之前,一定要先git pull,保證修改的是最新的版本;
(2)git push之前一定要先git pull,因為可能別人修改相同的檔案並已commit,應該merge過來,一併push
(3)git commit 和git push時都要diff,確認修改的內容是自己要修改的


假設我正在使用一個開源專案,為了時刻保持根官方github保持同步,我用git clone專案到本地並進行二次開發,我的大部分二次開發是不會和官方的核心檔案產生衝突的,但是個別檔案還是會衝突。。

比如經過一段時間我本機做了一些修改,這是官方倉庫也做了一些修改,併發布了一個小版本
這時我想更新官方最新 使用 git pull 的時候會提示衝突 那麼問題來了
開源專案二次開發 想隨時git pull獲得最新版本,並保留本機修改的方法是怎樣的?

我現在的做法
當git pull獲取官方最新更新的時候如果衝突
使用 git stash 快取本機的改動。
然後 git pull 下來官方最新的版本
然後 git stash pop 把本機的改動merge到程式碼中,手動解決衝突
我簡單測試了一下並沒發現什麼問題,因為我並不需要push程式碼到官方倉庫所以我一般也不會add,但是經歷過這次以後,我又做了一些修改,官方又更新了一些東西
使用git pull還是不行 我要本機git add . 一下 然後重複以上stash 步驟來保持更新和合並衝突,
不知道我這麼做是否正確,或者有什麼更好的做法麼?

其實如果你本地已經進行了提交(git commit),在拉取遠端的改動前,並不需要先git stash,直接git pull或者先git fetch再git merge就可以了。
當然,如果你在拉取之前,本地並沒有提交(git commit)的話,你的上述操作也是沒有問題的,但是,你也可以先將本地的修改做完然後提交了再拉取(git pull)。
其實,你的git stash應用的場合不太合適,git stash一般用於你在某一分支工作做了一半(還不值得做一次提交或者壓根還不想提交)時,你突然想切換到其他分支做一點兒別的事。這時,用git stash就再合適不過了。


Git中從遠端的分支獲取最新的版本到本地有這樣2個命令:

1.git fetch:相當於是從遠端獲取最新版本到本地,不會自動merge
git fetch origin master
git log -p master..origin/master
git merge origin/master

以上命令的含義:
首先從遠端的origin的master主分支下載最新的版本到origin/master分支上
然後比較本地的master分支和origin/master分支的差別
最後進行合併
上述過程其實可以用以下更清晰的方式來進行:

git fetch origin master:tmp
git diff tmp 
git merge tmp

從遠端獲取最新的版本到本地的test分支上
之後再進行比較合併

2. git pull:相當於是從遠端獲取最新版本並merge到本地
git pull origin master

上述命令其實相當於git fetch 和 git merge
在實際使用中,git fetch更安全一些
因為在merge前,我們可以檢視更新情況,然後再決定是否合併

參考部落格:
https://jingyan.baidu.com/article/6f2f55a15810d6b5b83e6c64.html
https://yq.aliyun.com/articles/41352
https://segmentfault.com/q/1010000008689944
http://blog.csdn.net/hudashi/article/details/7664457
http://yijiebuyi.com/blog/9c00641126e41779ef38cafb9c6aad67.html