國(guó)內(nèi)產(chǎn)品推廣網(wǎng)站廣州市疫情最新情況
1、git原理及整體架構(gòu)圖
一些常用的命令
git add . 或 git add + src/com/ygl/hello/hello.java 指定文件
git commit . 或 git commit + src/com/ygl/hello/hello.java 指定文件
git push origin 分支名稱
2、git stash的應(yīng)用場(chǎng)景
場(chǎng)景一:你正在當(dāng)前分支A開發(fā),開發(fā)到一半,需要切換到分支B去修改bug
方法一:(緊急情況)
① git stash
② git checkout B,在B分支處理完成后
③ git checkout A ④ git stash pop
方法二:(不緊急情況) 先開發(fā)完成A分支并且提交,后切過去B分支解決bug
場(chǎng)景二:代碼開發(fā)完成了,準(zhǔn)備提交
① git stash
② git pull
③ git stash pop
④ 本地可能出現(xiàn)沖突情況,如果沖突的直接解決就好
⑤ git commit -m “注釋”
⑥ git push origin 分支名字
關(guān)于git stash一些常用命令
存(入棧)
git stash
git stash save + “注釋”
取(出棧)
git stash pop + stash@{0}
git stash apply + stash@{0}
說明:如果apply是獲取棧的信息,但是步刪除棧,pop會(huì)刪除棧頂,如果pop上面有棧壓著,他的效果跟apply一樣,都不會(huì)刪除棧
清理
git stash drop +stash@{0}
git stash clear 清楚所有棧
查看
git stash list 查看所有棧
git stash show + stash@{0} 查看某個(gè)棧
3、理解rebase與merge的區(qū)別
rabase(變基): 原來節(jié)點(diǎn)的版本版本號(hào)會(huì)改變
merge(合并):原來節(jié)點(diǎn)保留,新增一個(gè)節(jié)點(diǎn)去合并
實(shí)現(xiàn)的目的是一樣的,只是展現(xiàn)形式或者場(chǎng)景不一樣
4、各種場(chǎng)景的代碼回滾方式
① 在工作區(qū)
git checkout + 分支名稱
② 在暫存區(qū)
git reset HEAD + commit_id
git checkout + 分支名稱
③ 在本地倉庫(見第7點(diǎn))
git reset --soft + commit_id 回退后,代碼存放在暫存區(qū)
git reset --mixed + commit_id 回退后,代碼存放在工作區(qū)
git reset -hard +commit_id 回退后,直接刪除代碼了
5、smart checkout與force checkout區(qū)別
smart checkout :會(huì)把沖突的這部分代碼帶到目的分支
force checkout : 不會(huì)把沖突帶到目的分支,但是會(huì)刪除當(dāng)前分支新增的東西
6、如何撤銷已經(jīng)push到遠(yuǎn)程的修改,及撤銷錯(cuò)如何恢復(fù)
撤銷:
① 找要回退到的版本號(hào) :git log
② 回退:git reset --soft 4cf2621742ae2beac4e54533df63037e6dfadb18
③ 強(qiáng)推:git push origin ygl02 --force
需要注意的是:別人在你撤銷前拉取你需要回退的代碼,如果別人再次提交,會(huì)導(dǎo)致代碼恢復(fù)
解決辦法:① 讓別人提交代碼再去解決, ② 你解決后讓別人再次拉取最新代碼再做提交
恢復(fù):
① 通過 git reflog找到原來的版本
② 跟上面的②③過程一樣
git中reset和revert的區(qū)別是什么
區(qū)別:
1、reset是徹底回退到指定的commit版本,該commit后的所有commit都將被清除;而revert僅是撤銷指定commit的修改,并不影響后續(xù)的commit。
2、reset執(zhí)行后不會(huì)產(chǎn)生記錄,revert執(zhí)行后會(huì)產(chǎn)生記錄。
使用:git revert +commit_id -> git push origin ygl01
還原:git revert --abort
7、理解soft、mixed,hard區(qū)別
從本地倉庫回退到不同的地方
git reset --soft + commit_id 回退后,代碼存放在暫存區(qū)
git reset --mixed + commit_id 回退后,代碼存放在工作區(qū)
git reset -hard +commit_id 回退后,直接刪除代碼了
8、git status 、git log 、 git reflog的使用
git status 查看文件的提交狀態(tài)
git log 查看提交版本日志
git reflog 查看所有版本提交日志(包括回退的版本)
9、如何查看本地分支與遠(yuǎn)程分支,及當(dāng)前選中的分支
查看本地分支
① git branch 注:有*號(hào)表示當(dāng)前分支
② git branch -v 包括一些當(dāng)前版本號(hào)等信息
查看遠(yuǎn)程分支
① git branch -r
② git brean -rv
查看所有分支信息
git branch -a
10、IDEA中用Terminal進(jìn)行g(shù)it commit輸入中文再進(jìn)行修改時(shí)出現(xiàn)亂碼的問題解決
第一步:
# --注釋:該命令表示提交命令的時(shí)候使用utf-8編碼集
git config --global i18n.commitencoding utf-8
# --注釋:該命令表示日志輸出時(shí)使用utf-8編碼集顯示
git config --global i18n.logoutputencoding utf-8
第二步:LESSCHARSET=utf-8
第三步:重啟idea
11、查看當(dāng)前提交的文件
git show --name-only 只看名字
git show; 看全部
12、git pull和git pull --rebase的區(qū)別和使用
使用下面的關(guān)系區(qū)別這兩個(gè)操作:
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
git pull = git fetch + git merge FETCH_HEAD
git pull --rebase = git fetch + git rebase FETCH_HEAD
差距就在git fetch之后的合并操作,合并操作有兩種方式: git merge和git rebase
13、git clone、git pull和git fetch的用法及區(qū)別
git clone:克隆的是整個(gè)遠(yuǎn)程庫。
git clone https://github.com/tensorflow/tensorflow.git
git fetch:克隆的是遠(yuǎn)程庫的一個(gè)分支。
git fetch更新本地倉庫的兩種用法:
# 方法一
$ git fetch origin master #從遠(yuǎn)程的origin倉庫的master分支下載代碼到本地的origin maste
$ git log -p master.. origin/master #比較本地的倉庫和遠(yuǎn)程參考的區(qū)別
$ git merge origin/master #把遠(yuǎn)程下載下來的代碼合并到本地倉庫,遠(yuǎn)程的和本地的合并
# 方法二
$ git fetch origin master:temp #從遠(yuǎn)程的origin倉庫的master分支下載到本地并新建一個(gè)分支temp
$ git diff temp #比較master分支和temp分支的不同
$ git merge temp #合并temp分支到master分支
$ git branch -d temp #刪除temp
git branch -D temp #注意刪除時(shí),需要兩次確認(rèn)刪除才會(huì)刪除
git pull:是拉取遠(yuǎn)程分支更新到本地倉庫的操作
git pull的用法:
$ git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
舉例:將遠(yuǎn)程主機(jī)origin的master分支拉取過來,與本地的branchtest分支合并。
$ git pull origin master:branchtest
如果將冒號(hào)和后面的branchtest去掉,則表示將遠(yuǎn)程origin倉庫的master分支拉取下來與本地當(dāng)前分支合并。
以上的git pull操作如果用git fetch來表示:
$ git fetch origin master:brantest
$ git merge brantest
14、如何創(chuàng)建新的分支
git branch dev
以有的分支創(chuàng)建新的分支
git checkout -b yourbranchname origin/oldbranchname
15、cherry-pick學(xué)習(xí)
16、git diff 沒有點(diǎn)、兩個(gè)點(diǎn)和三個(gè)點(diǎn)的區(qū)別(比較冷門,理解不了可以不看,看自己是否感興趣)
git 命令中的點(diǎn)總是讓人有疑惑,在不同的地方有不同的意思,那git diff 中的點(diǎn)代表什么,有的不加點(diǎn),有的兩個(gè)點(diǎn),有的三個(gè)點(diǎn)
我首先要明確git log 和 git rev-list 一樣都是表示的一個(gè)范圍, git diff 的參數(shù)不是標(biāo)識(shí)范圍,就是標(biāo)識(shí)兩個(gè)commit 之間的差異,跟范圍沒有關(guān)系
這里有兩個(gè)commit foo 和 bar ,也可以是兩個(gè)分支,如果是分支意味著要比較分支的head
git diff foo bar: 比較 foo 和 bar兩個(gè)commit點(diǎn)的差別
git log foo…bar 等同于上面不加點(diǎn) :比較 foo 和 bar兩個(gè)commit點(diǎn)的差別
git log foo…bar 等同于 git diff $(git merge-base foo bar) bar :比較的foo和bar merge base那個(gè)點(diǎn)(最近的共同的parent)和 bar
還是上圖說明更容易理解
和 git log 相比,git diff 是兩個(gè)commit點(diǎn)的比較,不涉及范圍,沒有點(diǎn)和兩個(gè)點(diǎn)代表直接比較,三個(gè)點(diǎn)代表從merge點(diǎn)開始比較
在gitlab web頁面上的diff 就是用的三個(gè)點(diǎn)的方式
17、git diff,git log 三點(diǎn) 和 兩點(diǎn)的區(qū)別(冷知識(shí))
18、一些配置公鑰私鑰配置涉及到的命令
配置git ,打開Git Bash,添加用戶名和郵箱(自己名字拼音):
git config --global user.name “zhangshan”
git config --global user.email “zhangshan@qq.com”
git config --global core.autocrlf false
ssh-keygen -t rsa -C “zhangshan@qq.com”
然后按三次回車
復(fù)制key到git平臺(tái)上setting,也可以用命令cat id_rsa.pub