與其一頭紮進git命令的海洋中,不如來點基本的例子試試手。它們簡單而且實用。實際
上,在開始使用git的頭幾個月,我所用的從來沒超出本章介紹的內容。
要不來點猛的?在做之前,先為當前目錄所有檔案做個快照,使用:
$ git init
$ git add .
$ git commit -m "my first backup"
$ git reset --hard
再次儲存狀態:
$ git commit -a -m "another backup"
以上命令將只跟蹤你第一次執行 *git add* 命令時就已經存在的檔案。如果要新增新文
件或子目錄,你需要告訴git:
$ git add readme.txt documentation
類似,如果你想讓git忘記某些檔案:
$ git rm kludge.h obsolete.c
$ git rm -r incriminating/evidence/
這些檔案如果還沒刪除,git刪除它們。
重新命名檔案和先刪除舊檔案,再新增新檔案的一樣。也有乙個快捷方式 *git mv* ,和
*mv* 命令的用法一樣。例如:
$ git mv bug.c feature.c
有時候你只想把某個時間點之後的所有改動都回滾掉,因為這些的改動是不正確的。那 麼:
$ git log
來顯示最近提交列表,以及他們的sha1雜湊值:
----------------------------------
commit 766f9881690d240ba334153047649b8b8f11c664
author: bob
date: tue mar 14 01:59:26 2000 -0800
replace printf() with write().
commit 82f5ea346a2e651544956a8653c0f58dc151275c
author: alice
date: thu jan 1 00:00:00 1970 +0000
initial commit.
----------------------------------
雜湊值的前幾個字元足夠確定乙個提交;也可以拷貝貼上完整的雜湊值,鍵入:
$ git reset --hard 766f
來恢復到乙個指定的提交狀態,並從記錄裡永久抹掉所有比該記錄新一些的提交。
另一些時候你想簡單地跳到乙個舊狀態。這種情況,鍵入:
$ git checkout 82f5
這個操作將把你帶回過去,同時也保留較新提交。然而,像科幻電影裡時光旅行一樣,
如果你這時編輯並提交的話,你將身處另乙個現實裡,因為你的動作與開始時相比是不
同的。這另乙個現實叫作「分支」(branch),之後 <
>。
至於現在,只要記住:
$ git checkout master
會把你帶到當下來就可以了。另外,為避免git的抱怨,應該在每次執行checkout之前提
交(commit)或重置(reset)你的改動。
還以電腦遊戲作為模擬:
- *`git reset --hard`*: 載入乙個舊記錄並刪除所有比之新的記錄。
- *`git checkout`*: 載入乙個舊記錄,但如果你在這個記錄上玩,遊戲狀態將偏離第
一輪的較新狀態。你現在打的所有遊戲記錄會在你剛進入的、代表另乙個真實的分支
裡。<
>。
你可以選擇只恢復特定檔案和目錄,通過將其加在命令之後:
$ git checkout 82f5 some.file another.file
小心,這種形式的 *checkout* 會不聲不響地覆蓋檔案。為阻止意外發生,在執行任何
checkout命令之前做提交,尤其在初學git的時候。通常,任何時候你覺得對執行某個命
令不放心,無論git命令還是不是git命令,就先執行一下 *git commit -a* 。
不喜歡拷貝站題雜湊值?那就用:
$ git checkout :/"my first b"
來跳到以特定字串開頭的提交。你也可以回到倒數第五個儲存狀態:
$ git checkout master~5
在法庭上,事件可以從法庭記錄裡敲出來。同樣,你可以檢出特定提交以撤銷。
$ git commit -a
$ git revert 1b6d
講撤銷給定雜湊值的提交。本撤銷被記錄為乙個新的提交,你可以通過執行 *git log*
來確認這一點。
一些專案要求生成變更日誌 生
成乙個,通過鍵入:
$ git log > changelog
得到乙個由git管理的專案的拷貝,通過鍵入:
$ git clone git://server/path/to/files
例如,得到我用來建立該站的所有檔案:
$ git clone git:
我們很快會對 *clone* 命令談的很多。
如果你已經使用 *git clone* 命令得到了乙個專案的乙份拷貝,你可以更新到最新版,
通過:$ git pull
=== 快速發布 ===
陷入困境。當然,這就是發布週期存在的原因。開發人員可能頻繁進行專案修改,但他
們只在他們覺得**可以見人的時候才擇時發布。
用git來完成這項,需要進入你的指令碼所在目錄:
$ git init
$ git add .
$ git commit -m "first release"
然後告訴你的使用者去執行:
$ git clone your.computer:/path/to/script
告訴你的使用者去執行:
$ git clone git:
從現在開始,每次你的指令碼準備好發布時,就執行:
$ git commit -a -m "next release"
並且你的使用者可以通過進入包含你指令碼的目錄,並鍵入下列命令,來更新他們的版本:
$ git pull
你的使用者永遠也不會取到你不想讓他們看到的指令碼版本。顯然這個技巧對所有的東西都
是可以,不僅是對指令碼。
找出自從上次提交之後你已經做了什麼改變:
$ git diff
或者自昨天的改變:
$ git diff "@"
或者乙個特定版本與倒數第二個變更之間:
$ git diff 1b6d "master~2"
$ git whatchanged --since="2 weeks ago"
我也經常用 瀏覽歷史, 因為他的圖形界
面很養眼,或者 ,乙個文字介面的東西,很慢的網
絡狀況下也工作的很好。也可以安裝web 伺服器,執行 *git instaweb* ,就可以用任
何瀏覽器瀏覽了。
比方a,b,c,d是四個連續的提交,其中b與a一樣,除了一些檔案刪除了。我們想把這
些刪除的檔案加回d。我們如何做到這個呢?
至少有三個解決方案。假設我們在d:
1. a與b的差別是那些刪除的檔案。我們可以建立乙個補丁代表這些差別,然後吧補丁
打上:
2. 既然這些檔案存在a,我們可以把它們拿出來:
$ git checkout a foo.c bar.h
3. 我們可以把從a到b的變化視為可撤銷的變更:
$ git revert b
哪個選擇最好?這取決於你的喜好。利用git滿足自己需求是容易,經常還有多個方法。
你所需要知道的一些git 的使用命令 歷史
歷史 的那部分。正如民族間會無休止的爭論誰犯下了什麼暴行一樣,如果在另乙個人的轉殖 裡,歷史版本與你的不同,當你們的樹互操作時,你會遇到一致性方面的問題。一些開發人員強烈地感覺歷史應該永遠不變,不好的部分也不變所有都不變。另一些覺 得 樹在向外發布之前,應該整得漂漂亮亮的。git同時支援兩者的觀點。...
食物與癌症,你需要知道的一些事情
癌症,在現代是一種關注率大增的疾病。以前總覺得它雖然嚴重,但離我還很遠,可是,隨著越來越多的新聞和身邊的傳言,這個死神變得有一點 司空見慣 起來。根據世界癌症研究 會 wcrf 的報告,2008年一年中,全球共有一百三十萬例新診斷的癌症病例,這個數字還會持續增長。癌症有很多種,所有病例中,比重最高的...
你所需要知道的關於AutoML和NAS的知識點
翻譯 pprp 日期 2018 8 21 automl和nas是深度學習領域的新秀。不需要過多的工作量,他們可以使用最暴力的方式讓你的機器學習任務達到非常高的準確率。既簡單又有效率。那麼automl和nas是如何起作用的呢?如何使用這種工具?神經網路架構搜尋,簡稱nas。開發乙個神經網路模型往往需要...