git的commit分三個(gè)區(qū)域以及三個(gè)階段:
working tree:就是你所工作在的目錄,每當(dāng)你在代碼中進(jìn)行了修改,working tree的狀態(tài)就改變了。
index file:是索引文件,它是連接working tree和commit的橋梁,每當(dāng)我們使用git add命令來(lái)登記后,index file的內(nèi)容就改變了,此時(shí)index file就和working tree同步了。
commit:是最后的階段,只有commit了,我們的代碼才真正進(jìn)入了git倉(cāng)庫(kù)。我們使用git-commit就是將index file里的內(nèi)容提交到本地版本庫(kù)commit中。
遠(yuǎn)程倉(cāng)庫(kù)remote repository:要將本地倉(cāng)庫(kù)中的修改推送到遠(yuǎn)程倉(cāng)庫(kù)才能實(shí)現(xiàn)共享,使用git push命令。
查看修改:
git diff:是查看working tree與index file的差別的。
git diff --cached:是查看index file與commit的差別的。
git diff HEAD:是查看working tree和commit的差別的。(你一定沒有忘記,HEAD代表的是最近的一次commit的信息)
對(duì)應(yīng)的回滾操作:
working tree改變了的,用 git checkout
index區(qū)改變了的,用git reset [--hard|soft|mixed|merge|keep] [或HEAD] , 然后再checkout
已經(jīng)commit了的,可以使用git revert,但用git revert 是沒法抹掉已經(jīng)commit的log的信息,如果要抹掉歷史信息,可以使用git reset,建議加參數(shù)--soft,這樣即使reset了,也不會(huì)拋棄當(dāng)前working tree中的修改
git的分支:
git branch ---列出分支列表,當(dāng)前所在分支前有符號(hào)*
git checkout 分支名----切換到分支
git的遠(yuǎn)程倉(cāng)庫(kù),git允許有多個(gè)遠(yuǎn)程倉(cāng)庫(kù);
git remote---列出遠(yuǎn)程倉(cāng)庫(kù)別名列表,默認(rèn)origin
git remote -v -------遠(yuǎn)程所有遠(yuǎn)程倉(cāng)庫(kù)url
git remote add 別名 url -------新增一個(gè)遠(yuǎn)程倉(cāng)庫(kù)
git clone URL 復(fù)制一個(gè)項(xiàng)目
git add . (或者git add 文件名, ,代表所有修改)將修改添加到索引區(qū);
git add fileName,將指定文件的修改添加到索引區(qū);
不小心add . 加錯(cuò)了怎么辦:
git rm --cached <added_file_to_undo>
如需撤銷文件夾加上-r
git rm -r --cached <added_file_to_undo>
git status 查看當(dāng)前工作狀態(tài),哪些文件做了修改等等;
git commit -m '修改日志' -------將索引區(qū)的修改提交到本地版本庫(kù)
git rebase 用來(lái)合并commit 一般在自己的開發(fā)分支進(jìn)行,需要合并代碼之前最好將自己的commit進(jìn)行合并,方面將來(lái)cherrypick某一個(gè)commit
git push [遠(yuǎn)程倉(cāng)庫(kù)別名 本地分支:遠(yuǎn)程分支] ----推送到遠(yuǎn)程倉(cāng)庫(kù),默認(rèn)是推送到origin倉(cāng)庫(kù)的同名分支;
git pull [origin master] --rebase -----------更新遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容到本地倉(cāng)庫(kù),默認(rèn)是更新origin倉(cāng)庫(kù)的同名分支,git pull命令實(shí)際包含git fetch和git merge兩個(gè)命令;
git log ------查看commit記錄
git checkout 文件名 ---------還原工作區(qū)對(duì)某文件的修改
git checkout 分支名 ---------切換分支
git reset ----------放棄索引區(qū)的修改
git reset commit id(通過(guò)git log獲取commit id) -----還原到 commit id
git cherry pick 是拉取某一個(gè)單個(gè)更改的版本
git cherry 常常配合著 git rebase -i 一起來(lái)用,后者是用來(lái)合并commit的,然后再用cherry pick來(lái)獲取想要的commit
git stash是個(gè)暫存命令,使用情況案例:
你當(dāng)前工作區(qū)的源代碼是可以生成正常運(yùn)行的版本的。
然后在1的代碼上做修改,但是改到了一半,還沒完成,不能正常工作也不能提交。
3.這時(shí)候測(cè)試說(shuō)有個(gè)比較緊急的bug要修復(fù),而且這個(gè)bug你衡量是可以很快解決的。
- 這時(shí)候就可以使用git stash,把當(dāng)前還沒commit的改動(dòng)暫存起來(lái)。
5.暫存后,工作區(qū)的內(nèi)容會(huì)變成只有已經(jīng)commit的內(nèi)容.然后開始修復(fù)3步驟中的bug,修復(fù)完提交。
6.繼續(xù)你之前還未完成的工作,這時(shí)候要從緩存區(qū)里把之前做了一半的代碼取出來(lái),使用命令git stash apply,默認(rèn)是將id為0的快照應(yīng)用到工作區(qū);
- git stash可以保存多個(gè)快照,可以通過(guò)git stash list查看,從中選擇你想要pop的stash,運(yùn)行命令git stash pop stash@{id}或者 git stash apply stash@{id}即可,
pop會(huì)刪除快照,apply則不刪除
git新建之后遠(yuǎn)端有merge,本地也有不相關(guān)的merge
這個(gè)時(shí)候需要這一句
git pull --allow-unrelated-histories
打 tag 標(biāo)簽
git tag -a v1.0 -m 'commit version 1.0'
加上 -f 覆蓋原有的tag
git tag -f v1.0
刪除本地tag
git tag -d v1.1
刪除遠(yuǎn)程tag
git push origin :v1.1 或者 git push origin --delete tag V1.1
git config --global user.name "用戶名" 更改用戶名
git 注冊(cè)用戶,如何獲取ssh 更改token 獲取密鑰,使用密鑰
如何獲取生成ssh key
ssh-keygen -t rsa -C "GitLab" -b 4096
然后綁定賬號(hào),添加秘鑰即可
關(guān)于現(xiàn)在的項(xiàng)目管理方式。
新建項(xiàng)目新建一個(gè)develop分支,一個(gè)online分支,online 分之是最后要上線的分支develop分支是平時(shí)測(cè)試代碼的分支,有新任務(wù)時(shí)新建一個(gè)任務(wù)分支分支名為任務(wù)號(hào),開發(fā)完成之后合并到develop分支,然后再合到online分支,然后再將任務(wù)分支刪掉