查看完整版本: git 的使用問題
頁: [1]

木紋 發表於 2014-12-12 02:15 AM

git 的使用問題

大家好
聽大家說git 很好用很久了,今天終於下定決心要來學一下
想不到一開始就遇到一些很神奇的問題= =

我稍微整理了一下:

1. 我commit 好了一些東西,共三次
   這時,我在 git log底下可以看到三次commit 的紀錄
   我想回到第一次commit,我該怎麼去?

我用的指令是 git reset --hard HEAD~2
在用 git log看的時候,只剩下一個commit 記錄,就是第一次的commit記錄
我到這邊就不知道要怎麼回到第三次的commit記錄了




2. reset 跟 revert 的差別?
  使用上我一時之間還看不出差別?
  還是說其實有很大的根本上的差異= =?


3. remote ? push ? pull ?

  所謂的remote,跟github有什麼關係嗎?
  如果有的話,一個網路上虛擬機的git 要怎麼跟現有的github 帳號做同步之類的呢?




4. 取消 git init?
  有點沒來由、但還是想知道
  假設我今天的程式已經確定寫好了,不會再有新的版本出現也不會走回頭路
  要怎麼設定這個專案已經到達最終版呢?
  想法是從不希望不小心動到git 會回到已前的版本、又因為問題 1. 而無法復原而來
  只要把 .git 的資料夾刪除就好了嗎?



新手發問,如有些關念上的嚴重錯誤
還輕批小力些 >...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

johnwanz 發表於 2014-12-12 08:47 AM

應該先要了解版本控制的概念, 相關軟體的操作都是圍繞著這個概念.

http://zh.wikipedia.org/wiki/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6
版本控制(Revision control)是維護工程藍圖的標準作法,能追蹤工程藍圖從誕生一直到定案的過程。此外,版本控制也是一種軟體工程技巧,藉此能在軟體開發的過程中,確保由不同人所編輯的同一程式檔案都得到同步。
=================================
一種簡單的版本控制形式如下:賦給圖的初版一個版本等級「A」。當做了第一次改變後,版本等級改為「B」,以此類推。最簡單的例子是,最初的版本指定為「1」,當做了改變之後,版本編號增加為「2」,以此類推。

藉此,版本控制能提供專案的設計者,將設計回復到之前任一狀態的選擇權,這種選擇權在設計過程進入死胡同時特別重要。
========================================

由網頁的介紹可以知道, 這是一種將文件的建立,修改及維護等過程, 交付服務器做成紀錄的系統, 對於不同版本要能夠選擇(取出), 這樣才有意義.

既然能夠選擇不同的版次取出, 自然就可以回朔到任何版本, 或是回復到修改之前的狀態.

關於指令操作, 首先建議去官網看說明, 第二是善用搜尋引擎查找別人寫的註解或心得.

至於結案跟版本控制系統, 我個人不認為有絕對關係. 對於怎麼操作版本控制系統, 屬於將系統與實務結合的做法問題, 並沒有絕對答案. 就像是同樣的Android手機, 每個人的使用習慣, 常用APP都不一樣. 不同的環境與工作習慣, 可能採取不同的方案. 我並沒有用git, 但我有用SVN, 一般是, 結案歸結案, 版本控制系統內的程式就放在那邊, 不會什麼需要特別動作的部分. (實務上, 要跟工作環境與習慣搭配, 還有很多的變化, 可以自己查找網頁或翻書, 了解別人怎麼使用, 再想想自己要怎麼用)...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

木紋 發表於 2014-12-12 02:41 PM

對於版本控制的概念,我想我應該有初步的認識 ><
但在實務操控上就遇到了問題
像是英語苦手(?)或是沒有實體伺服器而必須使用虛擬機造成權限上或環境的差異
所以才會想來板上發文、看有沒有人有遇過類似的問題,或這根本不是問題之類的

有稍微看過別人寫的git教本,有了初步的了解才來問的
我看的那份教本對於我提到的部分沒有寫得很詳盡...
所以想說會不會在伊莉上有更清楚的解答囉...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

johnwanz 發表於 2014-12-13 09:41 PM

* git reset --hard HEAD~2,  依照如下網頁所述, 是指, 丟棄最後兩個commit. 因此會不見.
http://stackoverflow.com/questions/7932222/how-to-revert-two-commits-back-and-commit-only-good-stuff

查看說明網頁
http://git-scm.com/2011/07/11/reset.html
reset 是指移動 head, 表示中間修改都不要了. 應該是還原的意思.

如果要取出版本, 應該使用checkout, 不是使用reset.
blog.wu-boy.com/2010/08/git-版本控制:利用-git-reset-恢復檔案、暫存狀態、commit-訊息/

我沒有實際用過git, 這是我查到的資訊, 供你參考看看....<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

木紋 發表於 2014-12-13 11:36 PM

Well, 雖然用git reset --hard HEAD~2會丟棄兩個commit
但在樹上還是可以看到該編修記綠與commit的描述..
用了git reset --soft HEAD~2
一樣會少掉兩個commit,但是檔案還會停在最新的那個commit的狀態

checkout是把還沒add 但修改過的單一檔案恢復成最新一次commit的狀態
所以也不是用來取出版本

-------------------------------

雖然問題還沒解決,但我找到了比較笨但是對我來說比較好用的版本控制= =
用 branch
我知道這是用來做測試的,但也可以用來做控制
說不定

這才是git的真正用法才對囧...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

johnwanz 發表於 2014-12-15 09:10 AM

本帖最後由 johnwanz 於 2014-12-15 09:17 AM 編輯

我在SVN的使用上, 並沒有處理HEAD的部分.

要取出版本, 是使用checkout;
如果是要恢復成未修改的狀態, 使用revert;
對於每一個局部修改任務, 我會使用branch管理.

checkout可以取回特定版本, 因此你說用來替代revert也是能做到的;
revert, 我用於還原特定檔案, 或整個版本, 但是這只是針對當前工作檔案, 不影響commit;
我查git reset, 看起來是會產生新的版本路徑, 這樣比較複雜些, 我沒有用過;
這些指令都帶有詞語意思, 較容易聯想, 也能表現出其關聯意義.


...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

joseph1125 發表於 2015-1-27 11:51 PM

我在你們討論的時侯已經裝好tortorisegit工作了

木紋 發表於 2015-1-29 03:05 AM

呃,嗯
當然,不用版本控制也是可以工作的

何不稍稍介紹一下tortorisegit的優缺點分享一下呢?
多學一個東西哪怕換跑道換公司如果有用不同的控制系統的話也可以很快上手這樣

bagarandom 發表於 2015-2-8 02:31 PM

tortorisegit是git在windows上的一種ui介面。
如果在windows上使用git的話,可以考慮用tortorisegit,
個人使用過,還不錯用。
頁: [1]