15分鐘Git

Git

image.png
  1. 工作區(qū)
  2. 暫存區(qū)(Stage)
  3. 分支

工作區(qū) --add--> 暫存區(qū) --commit--> 分支

git中用HEAD標(biāo)識(shí)當(dāng)前版本的最新的commitId。

合并分支

將test分支的更新提交到develop上的過程叫做合并分支,即是將test合并到develop上。

git checkout develop  # 切換到開發(fā)分支
git merge test   # test分支合并入develop分支

注意:合并分支是在本地執(zhí)行,就是說要合并的兩個(gè)分支都在本地才能合并,所以在合并時(shí),先fetch下

獲取遠(yuǎn)程分支

比如遠(yuǎn)程分支 origin/test_1_0_0 , 要拉取到本地:

git checkout -b test_1_0_0 origin/test_1_0_0

撤銷修改

從工作區(qū)到暫存區(qū),到版本分支,再到遠(yuǎn)程分支。不同階段的撤回,分為以下幾個(gè)場景。

場景1 工作區(qū)改亂了,撤銷工作區(qū)的修改

git checkout -- filename

這時(shí)候,有2中情況,

  1. stage區(qū)沒有修改,即沒有add, 那么會(huì)使用分支上的文件覆蓋工作區(qū)的文件,即用上次commit的覆蓋工作區(qū)。
  2. 當(dāng)前的修改之前還有修改,并且已經(jīng)add,那么撤回到stage中的修改,即用上次的add

場景2 工作區(qū)改亂了并且提交到stage

其實(shí)是將stage中的修改撤回,效果就是修改只有工作區(qū)有,stage中沒有了。
簡稱unstage

git reset HEAD filename

然后回到了場景1

場景3 已經(jīng)commit,沒有push到遠(yuǎn)程分支

git reset --hard HEAD^  // 上1次
git reset --hard HEAD^^ // 上2次
git reset --hard commitId // 回到commit

當(dāng)然,reset不僅可以回到過去,也可以重返未來。

  • git log : 看提交記錄
  • git reflog: 看git的操作記錄, 如果reset到過去的版本,在git log中找不不到未來的版本,可以使用這個(gè)命令來找

場景4 已經(jīng)commit并且push

git pull // 和遠(yuǎn)程一致
git revert commitId -m 1 // 這個(gè)是revert merge的
git push
git pull  // 保持和遠(yuǎn)程一致
git revert ${commmitId} // 干掉的commitId,取消該commitId的修改
git push
git log -3 // 驗(yàn)證一下,revert是不會(huì)刪除git log的

如果你已經(jīng)push很多次。revert要按照commitId倒敘,逐個(gè)revert。否則會(huì)導(dǎo)致沖突。因?yàn)閞evert commitId是僅僅回退當(dāng)次的修改。

git revert develop~3..   // 看著奇怪吧, revert三次,按照commitId倒序, 但是要寫三次commit log, 因?yàn)闀?huì)立即commit,所以每次都要寫commit log
// ~~~~~~~ 分割線 ~~~~~~~~
git revert --no-commit develop~3 // 不會(huì)立即提交
git status
git add -A
git commit -m "your message"
git push

git reset會(huì)清除git log, 回到過去后,就無法再回到未來。

刪除文件

git rm filename

Githup和公司的Gitlab并存

1. 生成秘鑰

# 生成秘鑰對(duì), 使用githup的用戶名,并指定秘鑰文件
ssh-keygen -t rsa -f ~/.ssh/id_rsa.githup -C "xxx@163.com"
# 生成秘鑰對(duì), 使用公司gitlab的用戶名,并指定秘鑰文件
ssh-keygen -t rsa -f ~/.ssh/id_rsa.githup -C "xxx@xx.com"

2. ssh-add

ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa.githup

3. config

# githup
Host home
Hostname github.com
IdentityFile ~/.ssh/id_rsa.githup
User si_kaijian@163.com
Host work
Hostname gitlab.xxx.com
IdentityFile ~/.ssh/id_rsa
User xxxx@xx.cn

配置gitlab和githup

記得在gitlab和githup上添加public key.

QA

incorrect committer email,committer email MUST be gitlab account

git config user.email xxxx@x.cn
git commit --amend --reset-author
cd githup_project_dir/
git config user.name "grade2"
git config user.email "grade2@163.com" 
cd company_project_dir/
git config user.name "xxxxx"

check源代的tag

# 查看所有的tag
git tag
# 從tag check出一個(gè)分支
git checkout -b branchName tagName
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git是目前最流行的版本管理系統(tǒng),也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,983評(píng)論 1 17
  • git 使用筆記 git原理: 文件(blob)對(duì)象,樹(tree)對(duì)象,提交(commit)對(duì)象 tree對(duì)象 ...
    神刀閱讀 3,857評(píng)論 0 10
  • 1,查看所有遠(yuǎn)程分支:%git branch -r 2, 拉取遠(yuǎn)程分支并創(chuàng)建本地分支git checkout -...
    will666閱讀 2,198評(píng)論 0 18
  • git branch 查看本地所有分支 git status 查看當(dāng)前狀態(tài) git commit 提交 git b...
    猿萬閱讀 5,397評(píng)論 1 45
  • “您好,請問你們是這個(gè)車廂的上鋪嗎?” 眼前的女孩身著一件純白色的羽絨服,圍著一條厚厚的淡藍(lán)色圍巾,背上紫色的書包...
    子雅詩心閱讀 1,144評(píng)論 0 1

友情鏈接更多精彩內(nèi)容