它甚至有可能嗎?如何預覽git-pull而不做提取?
基本上,有從我拉只使用遠程倉庫:
git pull
現在,我想預覽此拉會改變什麼(一個diff)沒有在我的身邊碰到任何東西。原因是我拉的東西可能不是「好」,我希望其他人在使我的存儲庫「髒」之前修復它。
它甚至有可能嗎?如何預覽git-pull而不做提取?
基本上,有從我拉只使用遠程倉庫:
git pull
現在,我想預覽此拉會改變什麼(一個diff)沒有在我的身邊碰到任何東西。原因是我拉的東西可能不是「好」,我希望其他人在使我的存儲庫「髒」之前修復它。
做了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的人,因爲它非常安全。
我認爲git fetch是你在找什麼。
它將拉動變化和對象,而不會將它們提交到您當地的回購索引。
它們可以稍後與git合併合併。
編輯:進一步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),然而在你的樹所有未提交的更改都將丟失,以及你所獲取的變化。
如果你解釋兩件事情,那可能是好的:1.我該如何撤銷git-fetch? 2.我如何看到差異? – 2008-10-07 20:50:56
1)撤消git-fetch? 2)git diff HEAD..origin – 2008-10-07 22:27:44
您可以從遠程倉庫獲取,查看差異,然後進行拉取或合併。
這是所謂的origin
遠程回購的例子,一個叫master
分支追蹤遠程分支origin/master
:
git checkout master
git fetch
git diff origin/master
git pull --rebase origin master
我創建了一個自定義的git的別名爲我做的:
alias.changes=!git log --name-status HEAD..
與你可以這樣做:
$git fetch
$git changes origin
這會幫助您在做merge
之前預覽更改。
如何在其他地方克隆回購,以及在真實結帳和新鮮克隆上進行git登錄以查看您是否擁有相同的東西。
我可能會遲到參加聚會,但這是一件困擾我太久的事情。 根據我的經驗,我寧願希望看到哪些變化之前,比更新我的工作拷貝和應對這些變化?
這轉到~/.gitconfig
文件:
[alias]
diffpull=!git fetch && git diff origin/`git rev-parse --abbrev-ref HEAD`..HEAD
它取的當前分支 - 比在工作副本和這個獲取的分支之間做一個差異。所以你應該只看到git pull
會帶來的變化。
我使用這兩個命令,我可以看到要更改的文件。
首先執行混帳取,它提供了這樣的輸出(輸出部分):
... 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.php和app /查看/ yyyy.php將被更新。
使用git的差異打印所有更新的文件與 改線比較兩次提交,但grep的它搜索並獲得唯一 包含輸出差異--git線。
你的編輯很奇怪。做一個「git fetch」不會以任何方式改變你的工作樹,所以如果你有未提交的本地修改就沒有關係。目前還不清楚你想要撤消的取回部分,因爲它不會觸及你的工作樹。 – dkagedal 2008-10-08 19:42:34
謝謝dkagedal,在我完全理解Git的工作原理之前,我寫了這個。我刪除了該編輯。 – 2010-01-08 02:12:32