2008-10-07 23 views
156

它甚至有可能嗎?如何預覽git-pull而不做提取?

基本上,有從我拉只使用遠程倉庫:

git pull 

現在,我想預覽此拉會改變什麼(一個diff)沒有在我的身邊碰到任何東西。原因是我拉的東西可能不是「好」,我希望其他人在使我的存儲庫「髒」之前修復它。

+2

你的編輯很奇怪。做一個「git fetch」不會以任何方式改變你的工作樹,所以如果你有未提交的本地修改就沒有關係。目前還不清楚你想要撤消的取回部分,因爲它不會觸及你的工作樹。 – dkagedal 2008-10-08 19:42:34

+0

謝謝dkagedal,在我完全理解Git的工作原理之前,我寫了這個。我刪除了該編輯。 – 2010-01-08 02:12:32

回答

177

做了git fetch之後,請執行git log HEAD..origin以顯示上次常用提交和原始分支之間的日誌條目。要顯示差異,請使用git log -p HEAD..origin來顯示每個修補程序,或者使用git diff HEAD...origin(三個點不是兩個)來顯示單個差異。

通常沒有任何需要撤銷抓取,因爲執行抓取只會更新遠程分支,而不會更新您的分支。如果您不準備在所有遠程提交中執行拉取和合並操作,則可以使用git cherry-pick僅接受所需的特定遠程提交。後來,當你準備好了所有的東西時,一個git pull會合併到其餘的提交中。

更新:我不完全確定你爲什麼要避免使用git fetch。所有的git fetch都會更新遠程分支的本地副本。此本地副本與您的任何分支沒有任何關係,並且與未提交的本地更改沒有任何關係。我聽說過在cron作業中運行git fetch的人,因爲它非常安全。

37

我認爲git fetch是你在找什麼。

它將拉動變化和對象,而不會將它們提交到您當地的回購索引。

它們可以稍後與git合併合併。

Man Page

編輯:進一步Explination

直起Git- SVN速成班link

現在,你怎麼從遠程倉庫什麼新的變化?您獲取它們:

git fetch http://host.xz/path/to/repo.git/ 

在這一點上他們是在你的倉庫,你可以通過檢查它們:

git log origin 

您也可以diff的變化。您也可以使用git log HEAD..origin查看您的分支中沒有的更改。然後,如果想將它們合併 - 只是做:

git merge origin 

需要注意的是,如果你不指定一個分支來獲取,這將方便默認爲跟蹤遠程。

閱讀手冊頁是誠實地給你最好的理解選項和如何使用它。

我只是想通過例子和內存來做到這一點,我目前沒有一個盒子可以測試。你應該看看:

git log -p //log with diff 

取指可以用混帳被撤銷的復位 - 硬link),然而在你的樹所有未提交的更改都將丟失,以及你所獲取的變化。

+0

如果你解釋兩件事情,那可能是好的:1.我該如何撤銷git-fetch? 2.我如何看到差異? – 2008-10-07 20:50:56

+1

1)撤消git-fetch? 2)git diff HEAD..origin – 2008-10-07 22:27:44

17

您可以從遠程倉庫獲取,查看差異,然後進行拉取或合併。

這是所謂的origin遠程回購的例子,一個叫master分支追蹤遠程分支origin/master

git checkout master             
git fetch           
git diff origin/master 
git pull --rebase origin master 
5

我創建了一個自定義的git的別名爲我做的:

alias.changes=!git log --name-status HEAD.. 

與你可以這樣做:

$git fetch 
$git changes origin 

這會幫助您在做merge之前預覽更改。

-1

如何在其他地方克隆回購,以及在真實結帳和新鮮克隆上進行git登錄以查看您是否擁有相同的東西。

0

我可能會遲到參加聚會,但這是一件困擾我太久的事情。 根據我的經驗,我寧願希望看到哪些變化之前,比更新我的工作拷貝和應對這些變化?

這轉到~/.gitconfig文件:

[alias] 
     diffpull=!git fetch && git diff origin/`git rev-parse --abbrev-ref HEAD`..HEAD 

它取的當前分支 - 比在工作副本和這個獲取的分支之間做一個差異。所以你應該只看到git pull會帶來的變化。

1

我使用這兩個命令,我可以看到要更改的文件。

  1. 首先執行混帳取,它提供了這樣的輸出(輸出部分):

    ... 
    72f8433..c8af041 develop -> origin/develop 
    ...

此操作提供了我們兩個提交的ID,第一個是舊的,並第二將是新的。

  • 然後比較使用git的差異

    git diff 72f8433..c8af041 | grep "diff --git"
  • 此命令將列出將要更新的文件這兩種提交:

    diff --git a/app/controller/xxxx.php b/app/controller/xxxx.php 
    diff --git a/app/view/yyyy.php b/app/view/yyyy.php 
    

    例如app/controller/xxxx.phpapp /查看/ yyyy.php將被更新。

    使用git的差異打印所有更新的文件與 改線比較兩次提交,但grep的它搜索並獲得唯一 包含輸出差異--git線。

    相關問題