一褒链、將本地項(xiàng)目推送到遠(yuǎn)程github
1.在本地創(chuàng)建倉庫
git init
2.將項(xiàng)目在本地提交
git add .
git commit
3.在github上創(chuàng)建倉庫蠢琳,本地添加remote地址
git remote add origin git_url
4.如果遠(yuǎn)程已經(jīng)有提交了啊终,比如readme,需要先將遠(yuǎn)程倉庫pull到本地
git pull [遠(yuǎn)程倉庫名] [遠(yuǎn)程分支名]
-
git pull origin master
- 第一次會(huì)讓你登錄github賬戶 - 報(bào)錯(cuò)
fatal: refusing to merge unrelated histories
- 原因是兩個(gè)分別沒有取得關(guān)聯(lián)傲须,無法merge
- 解決辦法蓝牲,加上--allow-unrelated-histories
,忽略不關(guān)聯(lián)
5.將本地提交推送到遠(yuǎn)程倉庫
git push -u [遠(yuǎn)程倉庫名] [本地分支名]
-
git push -u origin master
- 第一次加上-u
泰讽,之后就不需要-u
了
二例衍、分支管理
1.查看已有分支(本地+遠(yuǎn)程)
-
git branch
查看本地分支昔期,標(biāo)*號(hào)為當(dāng)前分支 -
git branch -a
查看本地+遠(yuǎn)程分支
2.新建分支(本地+遠(yuǎn)程)
1. 新建一個(gè)本地分支
git branch new_name
- 將會(huì)以當(dāng)前分支為基礎(chǔ)創(chuàng)建新分支
-
git checkout -b [分支名]
:創(chuàng)建并切換到新分支
2.新建一個(gè)遠(yuǎn)程分支
push 一個(gè)本地新分支到遠(yuǎn)程
- 先在本地建立一個(gè)分支:
git branch branch_name
- 先在本地建立一個(gè)分支:
- 切換到該新分支:
git checkout branch_name
- 切換到該新分支:
- 將這個(gè)本地分支推動(dòng)到遠(yuǎn)程倉庫以新建一個(gè)分支:
git push [遠(yuǎn)程倉庫名origin] [本地分支名]:[遠(yuǎn)程分支名]
- 將這個(gè)本地分支推動(dòng)到遠(yuǎn)程倉庫以新建一個(gè)分支:
- 直接創(chuàng)建遠(yuǎn)程分支:
git checkout -b [分支名] [遠(yuǎn)程倉庫名]/[分支名]
3.切換分支
1.切換本地分支:
git checkout branch_name
2.切換遠(yuǎn)程分支:
- 呵呵,不存在的
4.分支合并
1.將指定分支合并到當(dāng)前分支
git merge [指定分支名]
- 默認(rèn)采用的是Fast-forward(快進(jìn)模式)合并方式佛玄,直接將當(dāng)前分支指向了指定分支的最新提交硼一,會(huì)有環(huán)出現(xiàn),切不會(huì)產(chǎn)生新的提交梦抢。雖然速度快般贼,帶來的問題是這樣當(dāng)某個(gè)分支被刪除了,該分支上的log將也沒了奥吩。
--no-ff
禁用快進(jìn)模式哼蛆,那么每次merge都將是一個(gè)指定分支向當(dāng)前分支的新的提交。刪除分支之后圈驼,同樣會(huì)造成log丟失人芽。
2.解決merge沖突
-
git status
查看沖突的文件,并解決沖突 -
git add .
再次提交工作區(qū)文件 -
git commit
再次提交望几,完成合并 - 可選绩脆,刪除分支
3.git rebase
把分叉的提交歷史“整理”成一條直線,看上去更直觀
其實(shí)是在當(dāng)前分支上對其他分支依次執(zhí)行git cherry-pick
橄抹,最后得到的log就是一條線上的
5.刪除分支
1.刪除本地分支
git branch -d [分支名]
2.刪除遠(yuǎn)程分支:
push 一個(gè)空分支
- 可以push一個(gè)空分支來刪除遠(yuǎn)程分支:
git push [遠(yuǎn)程倉庫名 origin] :[刪除的遠(yuǎn)程分支名]
- 也有專門的命令:
git push [遠(yuǎn)程倉庫名 origin] --delete [刪除的遠(yuǎn)程分支名]
三靴迫、本地版本穿梭
1.工作區(qū)和版本庫
- 工作區(qū):可見的文件夾目錄
- 版本庫(repository): .git 隱藏文件夾
- 暫存區(qū)(stage) + 版本庫 -
git checkout --[filename]
:撤銷工作區(qū)的更改
- 加--
是為了區(qū)分切換分支 -
git status
:查看暫存區(qū)內(nèi)容 -
git add
:添加工作區(qū)更改到暫存區(qū)
- 添加文件或者刪除文件不需要添加到暫存區(qū),直接commit就可以了 -
git reset [filename]
:撤銷(unstage)暫存區(qū)的更改到工作區(qū) -
git commit
:提交暫存區(qū)的內(nèi)容到版本庫
---amend
楼誓,在上次提交的基礎(chǔ)上再次提交
2.版本回退
-
git reset --hard [commit_id]
- 通過git log
和git reflog (查看命令歷史)
查看commit id
--- hard
的作用是: -
git reset --hard HEAD^
-HEAD
表示當(dāng)前版本玉锌,HEAD^
:上一個(gè)版本
---hard
:表示的是徹底回退,而不是將提交回撤到暫存區(qū)或者工作區(qū)疟羹,工作區(qū)和暫存區(qū)的變化將為空主守。
四、遠(yuǎn)程倉庫
0.上傳SSH key
用ssh key來區(qū)別是否是本人操作榄融,未上傳ssh参淫, 無法push
1. 生成SSH key
$ ssh-keygen -t rsa -C "youremail@example.com"
2. 查看主目錄.ssh
,找到密鑰
-
id_rsa
和id_rsa.pub
3. 將公鑰上傳
- 之后就可以進(jìn)行push操作了
1.本地與遠(yuǎn)程操作
1. 將遠(yuǎn)程倉庫和本地倉庫關(guān)聯(lián)(添加遠(yuǎn)程倉庫):
-
git clone [git倉庫url]
的情況下直接關(guān)聯(lián)愧杯,不需要再添加
Git自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對應(yīng)起來了涎才,并且,遠(yuǎn)程倉庫的默認(rèn)名稱是origin
并且只會(huì)clone遠(yuǎn)程的master分支到本地 - 其他情況
-git remote add [倉庫名] [git倉庫url]
-git remote rm [倉庫名]
2. 查看遠(yuǎn)程倉庫名
git remote
- 一般默認(rèn)為:
origin
3.將本地分支與遠(yuǎn)程分支建立連接
git branch --set-upstream-to= [遠(yuǎn)程倉庫名]/[遠(yuǎn)程分支名] [本地分支名]
- 這是進(jìn)行
git push
和git pull
前提力九,否則需要參數(shù)指定 - 設(shè)置好了之后耍铜,直接
git push
,git pull
就可以跌前,無需參數(shù)
4. 拉取遠(yuǎn)程內(nèi)容
git pull [遠(yuǎn)程倉庫名] [遠(yuǎn)程分支名]
4. 推送本地分支到遠(yuǎn)程分支
-
git push -u [遠(yuǎn)程倉庫名] [本地分支名]
: 推送本地當(dāng)前分支到遠(yuǎn)程分支 -
-u
參數(shù)只需要第一次加棕兼,意思是將本地分支與遠(yuǎn)程分支關(guān)聯(lián)了,相當(dāng)于--set-upstream-to=origin/branch
的作用