我有本地&遠程git存儲庫。我想將本地存儲庫與遠程存儲庫同步,以便我的本地存儲庫成爲遠程存儲庫的100%副本。這意味着如果這些回購中的某些文件不同,我們會用遠程文件覆蓋本地文件。如果本地回購站中存在遠程回購中不存在的文件,則會刪除本地文件。git:與遠程同步本地回購
有沒有辦法實現,而不是做一個新的遠程回購克隆?
類似的問題作爲Sync local git repo with remote in one shot discarding local changes/commits。
我有本地&遠程git存儲庫。我想將本地存儲庫與遠程存儲庫同步,以便我的本地存儲庫成爲遠程存儲庫的100%副本。這意味着如果這些回購中的某些文件不同,我們會用遠程文件覆蓋本地文件。如果本地回購站中存在遠程回購中不存在的文件,則會刪除本地文件。git:與遠程同步本地回購
有沒有辦法實現,而不是做一個新的遠程回購克隆?
類似的問題作爲Sync local git repo with remote in one shot discarding local changes/commits。
您可以使用git hooks。只需創建一個掛鉤,在更新後將其更改爲其他回購。
當然,你可能會遇到合併衝突,所以你必須弄清楚如何處理它們。
您需要明白,Git存儲庫不僅僅是目錄和文件的樹,而且還存儲這些樹的歷史記錄 - 可能包含分支和合並。
從存儲庫中獲取數據時,您會將全部或部分分支複製到您的存儲庫中。然後這些信息在您的存儲庫中被稱爲「遠程追蹤分支」,例如,像remotes/origin/master
或類似命名的分支。
從遠程存儲庫獲取新的提交不會改變任何有關您本地工作副本的內容。
您的工作副本通常會檢出一個提交,稱爲HEAD
。此提交通常是您當地分支機構的一個提示。
我想你想更新你的本地分支(或者所有的本地分支?)到相應的遠程分支,然後檢查出最新的分支。
爲避免與工作副本(可能有本地更改)發生衝突,首先清理所有未版本化的東西(使用git clean
)。然後檢出與要更新的遠程分支對應的本地分支,並使用git reset
將其切換到獲取的遠程分支。 (git pull
將包含遠程分支在本地的所有更新,這可能是相同的,或者如果您有本地提交,則創建合併提交。)
(但那麼您將真正失去本地更改 - 。工作副本和本地提交確認你真的想這樣 - 否則最好使用一個新的分支,這樣可以節省您的本地提交和使用git stash
保存其尚未提交的更改)
編輯:。 如果您只有一個本地分支並且正在跟蹤一個遠程分支,那麼您所需要做的就是
git pull
從工作目錄內部。
這將獲取當前版本的所有跟蹤遠程分支,並將當前分支(和工作目錄)更新爲它正跟蹤的遠程分支的當前版本。
如果我在本地變着法子存儲庫,只有a。)想要從遠程獲得所有內容的副本,並且b。)希望在版本之間顯示差異。所以我不承諾,不改變任何東西=沒有本地更新/更改。我應該定期使用哪些命令(例如每週左右)來實現上述兩個功能?請回答KISS(保持簡單愚蠢) - 我也是git noob,而且會RTFM - 但一開始需要幫助。 ;) – kobame 2011-06-17 12:36:19
在你的簡單情況下,我認爲'git pull'應該足夠了。 (我更新了答案。) – 2011-06-17 13:54:54
如果我有一些本地更改,我不想提交。現在,當我做拉它說我提交或藏匿他們。所以在這種情況下,我該如何告訴git來覆蓋這些並執行pull? – Harshana 2015-09-17 07:47:39
聽起來像是你想遠程倉庫的一面鏡子:
git clone --mirror url://to/remote.git local.git
該命令創建一個純倉庫。如果你不想要一個裸倉庫,事情會變得更加複雜。
(此信息是從The Git User's Manual)
我也在學習,所以這可能不是完全是一個問題的答案,但它可能會幫助別人:
git branch -r
查看它們)git fetch
。這不會影響您現有的任何自定義創建的分支。git add origin /path/to/repository
)使用git checkout origin/branch_name
,這將覆蓋當地人分支branch_name
這些步驟將做修改它:
git reset --hard HEAD
git clean -f -x -d -n
然後在不-n
這將需要的所有本地更改護理。現在提交......
git status
,並注意行如:
Your branch is ahead of 'xxxx' by N commits.
請記數 'N' 現在:
git reset --hard HEAD~N
git pull
最後:
git status
應該顯示沒有g添加/提交。 全部乾淨。
然而,新鮮的克隆可以做同樣的事情(但速度很慢)。
===更新===
由於在時間略有改善我的git知識,我想出了另一種更簡單的方式做同樣的。以下是(#with解釋)。雖然你的工作的分支:
git fetch # This updates 'remote' portion of local repo.
git reset --hard origin/<your-working-branch>
# this will sync your local copy with remote content, discarding any committed
# or uncommitted changes.
雖然你的本地提交和變化從視線在這之後消失,有可能恢復已提交的變化,如果需要的話。
非常感謝更新作品完美地與github和bitbucket :) – commonSenseCode 2015-07-01 20:58:40
upvoted因爲更新 – Tundebabzy 2018-02-16 09:44:34
git fetch --prune
-p,--prune
取後,除去任何遠程跟蹤分支,其遙控器上不再存在。prune options
如果您正在討論同步分叉回購,那麼您可以按照下列步驟操作。
如何從混帳
同步叉子庫查看當前的Git分支
git branch
結賬掌握,如果你不是高手
git checkout master
獲取上游資源庫,如果你有正確的訪問權限
git fetch upstream
如果您收到以下錯誤,然後運行
git remote add upstream [email protected]:upstream_clone_repo_url/xyz.git
fatal: 'upstream/master' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
現在運行下面的命令。
git fetch upstream
現在,如果你是高手,然後合併上游/大師到主分支
git merge upstream/master
這就是它!
通過git remote
命令,更具體的git remote -v
如果我也有權利提交到上游回購,我可以創建本地上游分支,做工作,將知難而上有交叉檢查。
爲什麼我應該在第三步中當我已經得到一個錯誤時去做上游獲取上游? – 2017-03-03 03:48:27
總是當我來到這裏,我正在尋找[正在同步叉子(https://help.github.com/articles/syncing-a-fork/) – 2016-06-11 07:44:06