git checkout 和 git reset 區(qū)別
首先需要知道工作區(qū)(working diretory)和暫存區(qū)(Stage)這兩個概念眉抬。工作區(qū)的該概念不僅包含你實(shí)際操作、更改的文件還應(yīng)當(dāng)包括當(dāng)前修改但未add存入暫存區(qū)的文件變化信息桑逝,暫存區(qū)的作用則是臨時存儲文件的變化信息当凡,在git add file操作之后咧党,暫存區(qū)中將記錄file文件上的修改信息炊豪。暫存區(qū)的存在更細(xì)化了時間節(jié)點(diǎn)傲醉,要知道commit的往往是有重大改變的版本或者是在一次修改工作整體完成之后才使用commit寒匙。而在這之間需要保存的修改零如,自然需要一個緩存區(qū)暫時存放。
廖雪峰的git教程中在“撤銷修改”部分中锄弱,提到了幾種情景和相應(yīng)的git checkout與git reset命令考蕾。通過我的分析,在這個更直接地分析這兩個命令的含義会宪。
git checkout -- file肖卧;撤銷對工作區(qū)修改;這個命令是以最新的存儲時間節(jié)點(diǎn)(add和commit)為參照掸鹅,覆蓋工作區(qū)對應(yīng)文件file塞帐;這個命令改變的是工作區(qū)
git reset HEAD -- file;清空add命令向暫存區(qū)提交的關(guān)于file文件的修改(Ustage)巍沙;這個命令僅改變暫存區(qū)葵姥,并不改變工作區(qū),這意味著在無任何其他操作的情況下句携,工作區(qū)中的實(shí)際文件同該命令運(yùn)行之前無任何變化
git push 與pull的默認(rèn)行為和-u參數(shù)的意義
https://www.zhihu.com/question/20019419
https://segmentfault.com/a/1190000002783245
git checkout 與 git reset 進(jìn)階
http://www.tuicool.com/articles/A3Mn6f
報(bào)錯信息
1.git checkout時 <> 字符串引起錯誤
省略<>即可
2.本地向遠(yuǎn)處push時出現(xiàn) ?failed to push some refs to...
可能由于遠(yuǎn)程版本庫與本地沖突導(dǎo)致榔幸。解決辦法:
git pull --rebase origin master? 合并代碼
git push -u origin master? ? 上傳代碼到github
3.顯示亂碼
git config --global core.quetepath false
4.Pull is not possible because you have unmerged files.
應(yīng)該是因?yàn)閘ocal文件沖突了
解決方法:
以下方法引用自網(wǎng)絡(luò)――
1.pull會使用git merge導(dǎo)致沖突,需要將沖突的文件resolve掉 git add -u, git commit之后才能成功pull.
2.如果想放棄本地的文件修改矮嫉,可以使用git reset --hard FETCH_HEAD削咆,F(xiàn)ETCH_HEAD表示上一次成功git pull之后形成的commit點(diǎn)。然后git pull.
注意:
git merge會形成MERGE-HEAD(FETCH-HEAD) 蠢笋。git push會形成HEAD這樣的引用拨齐。HEAD代表本地最近成功push后形成的引用。
就我的經(jīng)驗(yàn)昨寞,有時候會莫名其妙地出現(xiàn)這種狀況瞻惋,而且Untracked files 還特別多(實(shí)際上自己可能只改了一兩個文件)厦滤,所以只好先保存好自己確定做出的local的修改,然后用git reset --hard FETCH_HEAD回到上次成功pull之后的點(diǎn)熟史,然后再pull就沒有問題了
5.You are not currently on a branch.
癥狀:有一次pull的時候又出現(xiàn)沖突馁害,這回用“git reset --hard FETCH_HEAD”方法都不行了,出現(xiàn):
$ git pull
You are not currently on a branch, so I cannot use any
'branch..merge' in your configuration file.
Please specify which remote branch you want to use on the command
line and try again (e.g. 'git pull ').
See git-pull(1) for details.
解決方法:
首先git checkout -b temp
其次git checkout master
即可恢復(fù)到master repository的狀態(tài)蹂匹,然后就可以pull了