git主要由這幾個分區組成,git的各類命令其實也是圍繞這幾個分區來展開的,接下來將經過這幾個分區來理解git的各類操做;
git init
git clone
git add
git commit
git 切換分支時會把未add或未commit的內容帶過去,這一點值得注意。爲何呢?由於未add的內容不屬於任何一個分支,未commit的內容也不屬於任何一個分支。也就是說,對於全部分支而言,工做區和暫存區是公共的。
要想在分支間切換, 又不想又上述影響, 怎麼辦呢? git stash搞起。要注意,在當前分支git stash的內容, 在其餘分支也能夠git stash pop出來,爲何? 由於:工做區和暫存區是公共的。
git push origin 分支名
git push = git fetch + git merge
有時候在git push的時候,經常會出現push被阻止的狀況,這是由於遠程倉庫被其餘人更新了,當前分支落後了其餘人的commit,須要先將遠程分支pull到本地工做區,再看有沒有衝突(多人同時修改了一個文件),如有衝突則解決衝突之後再進行提交;但有時候還會出現git pull失敗的狀況:
這是由於本地工做區間跟遠程倉庫的新代碼衝突了:
這時須要解決衝突後提交本地修改。
緩存區 除了開始出現外,後續提交代碼、更新代碼篇章都在打醬油;終於,此次衝突解決事件, 它將會是主角
解決衝突後提交本地修改的思路大概以下:
1.將本地修改的代碼放在緩存區;
2.從遠程倉庫拉取最新代碼;
3.拉取成功後再從緩存區將修改的代碼取出, 這樣最新代碼跟本地修改的代碼就會混雜在一塊兒;
4.手工解決衝突後;
5.提交解決衝突後的代碼;html
1.git pull 出現報錯信息: error: Your local changes to the following files would be overwritten by merge: README.md Please, commit your changes or stash them before you can merge. Aborting 2.git stash 3.git pull 4.git stash pop
5.手工解決衝突後: git add README.md 6.git commit -m 'solve conflict' 7.git push origin
git reset --soft HEAD^
這樣就撤銷了commit操做,可是代碼仍然保留了下來java
HEAD^的意思是上一個版本,也能夠寫成HEAD~1
若是你進行了2次commit,想都撤回,可使用HEAD~2git
--mixed 默認參數, git reset --mixed --soft HEAD^與 git reset --soft HEAD^是一個效果 --soft, 不刪除工做空間改動代碼,撤銷commit,不撤銷add --hard 刪除工做空間改動代碼,撤銷commit,撤銷add, 完成這個操做後就恢復到了上一次commit的狀態 若是commit註釋寫錯了,只是想改一下注釋,只須要: git commit --amend 此時會進入默認vim編輯器,修改註釋完畢後保存就行了。 撤銷add git reset HEAD 若是後面什麼都不跟的話 就是上一次add 裏面的所有撤銷了 git reset HEAD XXX/XXX/XXX.java 就是對某個文件進行撤銷了
在git中,咱們使用git config 命令用來配置git的配置文件,git配置級別主要有如下3類:github
這個配置文件一般位於clone後代碼倉庫的.git隱藏目錄下的config文件
這個配置文件一般位於
~/.gitconfig 文件,具體到你的用戶。你能夠經過傳遞 --global 選項使 Git 讀或寫這個特定的文件
/etc/gitconfig 文件:包含了適用於系統全部用戶和全部庫的值。若是你傳遞參數選項’--system’ 給 git config,它將明確的讀和寫這個文件
具體的操做指令就不在贅述,網上能搜索到不少相關的文檔和資料;
在最近的一些學習過程當中,發現一個問題;若本地有兩個不一樣的代碼倉庫,想分別用不一樣的用戶去提交,該如何操做呢?
由上面的背景知識就能夠知道,咱們可使用倉庫的local級別配置文件來給每一個倉庫設置不一樣的用戶;vim
git config user.name "wzj" git config user.email "wzj@qq.com"
這樣就能夠不一樣倉庫使用不一樣用戶去提交了;緩存
在學習過程當中,當clone後的倉庫修改後,提交時卻出現了編輯器
remote: Permission to bytewang123/basic.git denied to bytewong. fatal: unable to access 'https://github.com/byte/basic.git/': The requested URL returned error: 403
經過顯式的在config文件的url中增長
https://git用戶名@
github.com/...,便可解決學習
完整示例:fetch
[remote "origin"] url = https://git用戶名@github.com/git用戶名/倉庫名.git
當運行 git status ,git會將本地分支dev與它正在跟蹤的遠程分支進行比較(origin/master)
,由於origin/master沒有被改變,它仍然是當前dev分支(和origin/dev)後面的1提交/更改,因此會出現提示。url
參考文章:
https://www.cnblogs.com/cb032...
https://blog.csdn.net/w958796...
https://www.cnblogs.com/aries...
https://my.oschina.net/newcha...