星期日, 5月 29, 2016

Git 使用心得及記錄

0. 本地Commit有誤時,如何處理?
=>用reset
解法:
1. git reset --mixed (預設),  repo的commit會取消,目前workspace己修改的檔案內容會保留,(就是好像退回到連add都沒做的狀態,好像什麼事都沒發生)

git reset HEAD file ( which by default is using the --mixed flag) is different in that in the case where the file is already in the repo, it replaces the index version of the file with the one from repo (HEAD), effectively unstaging the modifications to it.


2. git reset --soft, repo的commit會取消,stage中會保持該取消的commit中的變更資料,(就是好像退回到原add的動作)。
3. git reset --hard, repo的commit會取消,會把workspace目前修改的檔案刪除,worksapce中的檔案會回到前一次commit的內容,所有這次改的資料都會不見。


可參考影片: https://www.youtube.com/watch?v=gVByWjwetVc

1. 如果不小心把本地端檔案殺掉了,但是reposity之前有儲存,要如何救回來?很簡單,就再從reposity checkout就好了。

2. Check out 會不會把目前目錄下的資料全部清除?
 答案是會全把舊的資料全殺光,所以checkout之前要記得先commit或備份,以免損失慘重。

3. 把檔案用git add加到stage後,在workspace再修改,此時再commit時,檔案會用那個版本的?

Ans: 檔案會用staged的版本。workspace修改的版本或資料並不會commit進去。
(If I modify a file that is added, and retry the commit, the changes aren't recognized, so the commit will fail again.)

解決方法1: 再用git add重做一次就好
解決方法2: 先用預設 reset的命令(--mixed),取消stage的動作(此時不會覆蓋workspace的版本),再重新commit就好。

注意: 千萬不要亂下git reset -hard,會把workspace目前修改的檔案刪除 

https://stackoverflow.com/questions/27776588/modifying-a-file-after-git-add

http://lib.csdn.net/article/git/28621



沒有留言: