標籤:

Git如何在本地查看遠端倉庫超前本地提交的日誌信息?僅僅是日誌信息哦

A、B同時維護一個遠端倉庫G

A在本地拉取了G最新的代碼信息,然後開始進行本地的開發工作。

在A完成自己工作後,想看一下倉庫上有多少條超前本地HEAD的提交日誌?(並不想拉取遠端倉庫中的最新代碼哈)

我搜到大量回答如下:

$ git fetch origin master
將某個遠程主機origin的更新,全部取回本地。

然而,這條命令將遠端分支的代碼,取回本地,是我所不希望的。我只是想看看,那些超前的log信息而已。

所以,對於這個問題,該怎樣操作呢?


git fetch


用git fetch

然後用git log 查看remotes branch上的紀錄

--------------補充的分割線------------------

有一天,有個admin創建了一個cloud用來給別人託管代碼

有位叫jerry的程序員就開始使用這個cloud

他想做個cake,於是初始化了一個git倉庫,並且將其和cloud建立了連接,以後會將cake的改動同步到cloud裡面去。

他開始了cake的創作過程,然後將第一版cake上傳到了cloud裡面。

他往裡面加了點cream和apple,作為第一版的原料,隨後push到了cloud裡面。

有另一位程序員tom得知了cake的存在,對其很感興趣,於是和jerry商量過後加入了cake的開發。於是他去cloud上clone了cake,並且在他電腦上也存放在了名為cake的文件夾內。

隨後tom往cake里增加了一點banana

但他還沒有將banana的改動同步到cloud上去,所以只是在他的電腦里目前cake包含了cream,apple和banana。

他想看看當初clone下來的當下,cloud裡面jerry做了哪些改動。

於是他先用git branch -a查看了下所有本地和遠端的branch(遠端的branch並不是存在於cloud裡面的branch,而是在本地的,只不過它是「當時」的cloud的branch的一個鏡像),然後用git log remotes/origin/master看了下當初的history。發現jerry只是往裡面加了點cream和apple。

與此同時,jerry還在繼續往cloud里更新他的cake。

他又往cake里加了點oringe,並且push到了cloud上。也許因為和tom有12個小時時差,他也許太累了,也許太懶了,他並沒有告訴tom他又更新了什麼東西。

而現在tom剛好也想看看後來jerry往cloud里有放了些什麼東西

於是他用git fetch從origin(這裡就是cloud的地址)上獲取了cloud上master branch當前的內容。這麼做只會更新本地的.git里的內容,並不會修改tom自己的code,因為只fetch,沒merge。

然後他發現了jerry的增加的oringe

tom隨後想到要創建一個branch來跟蹤cloud上最新的情況

於是他創建了一個新的branch,叫做jerry-cake。為了保險起見,他用了fff4f47這個初始commit來創建這條新的branch。隨後用git log看了下,發現最後一筆就是fff4f47。然後用git pull origin master,這會更新本地.git里remotes/origin/master的內容(其實前面已經用git fetch更新過了,不過這裡再更新一次也不會有錯),然後會將當前branch(也就是jerry-cake)的代碼同步成和cloud的master branch上內容一樣(其實是執行了一個git merge的動作,沒有發生錯誤的話,就自動merge好了)。然後再用git log看一下jerry-cake上的內容,發現了jerry新增的那個oringe。這個時候他可以再用git checkout master回到自己本地的master branch上去開發自己的cake,後面可以用merge,rebase,cherry-pick之類的方法把自己的改動整合到cloud的master branch上去。jerry也可以用以上的方法獲取tom的改動。最後兩人會合作出一個美味的cake吧!


git學習中,如下兩條命令不知道是不是你想要的:

1)git remote -v 查看遠程版本庫信息,我這裡大概是

origin git@xxx.git (fetch)

origin git@xxx.git (push)

2)git log origin


完全不需要git fetch,也比SVN簡單得多。兩種方法:

1. 方法1: git status

~/git/linux$ git status
On branch master
Your branch is behind origin/master by 25 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)

nothing to commit, working directory clean

2. 方法2: git log --left-right --oneline origin/分支名稱...分支名稱

~/git/linux$ git log --left-right --oneline origin/master...master
&< 144c766 Merge tag pci-v4.11-fixes-2 of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci &< 34bbce9 Merge branch for-linus of git://git.kernel.dk/linux-block &< bb61ce5 Merge tag media/v4.11-2 of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media &< 672a2c8 axonram: Fix gendisk handling ...

注意,上面操作都是在同比一個本地倉庫的同一個分支的同一個狀態下。


用svn遠沒這麼麻煩 直接就能看遠程的更新記錄 雖然只有一個分支 但可以人工判斷合併代碼,根本沒必要弄這些分支 git好多流程根本就沒必要


推薦閱讀:

為什麼git默認不區分文件夾大小寫?
gg———good use of git,一個實用的git分支模型
自學Git,有哪些書籍或者好的學習資源?
Github 有什麼優缺點?把項目直接搭建在 Github 上合適嗎?

TAG:Git | GitHub |