Git基礎(chǔ)命令拾荒

Git是什么?

Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)(沒(méi)有之一)。

  • 與傳統(tǒng)cvs,svn區(qū)別
  1. 每一個(gè)開(kāi)發(fā)人員的電腦上都有一個(gè)Local Repository,所以即使沒(méi)有網(wǎng)絡(luò)也一樣可以Commit,查看歷史版本記錄,創(chuàng)建項(xiàng) 目分支等操作,等網(wǎng)絡(luò)再次連接上Push到Server端。
  2. Git把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ),而SVN是按文件。
  3. Git沒(méi)有一個(gè)全局版本號(hào),而SVN有:目前為止這是跟SVN相比Git缺少的最大的一個(gè)特征。
  4. SVN必須先Update才能Commit,可以看到所有的Log。
  5. 強(qiáng)大的分支管理。
創(chuàng)建一個(gè)倉(cāng)庫(kù)(版本庫(kù))
// 創(chuàng)建一個(gè)倉(cāng)庫(kù)
wanss-MacBook-Pro:gittest wans$ git init
// 創(chuàng)建一個(gè)本地倉(cāng)庫(kù),裸倉(cāng)庫(kù)
wanss-MacBook-Pro:gittest wans$ git --git-dir=lib1.git init --bare

// 獲取一個(gè)遠(yuǎn)程git庫(kù)
wanss-MacBook-Pro:gittest wans$ git clone http://...git

裸倉(cāng)庫(kù),只保存git歷史提交的版本信息,而不允許用戶在上面進(jìn)行各種git操作
這個(gè)就是最好把遠(yuǎn)端倉(cāng)庫(kù)初始化成bare倉(cāng)庫(kù)的原因。

// 添加一個(gè)README.md文件
wanss-MacBook-Pro:lib2 wans$ echo "hello git" > README.md
// 將README.md添加到暫存區(qū),等待提交
wanss-MacBook-Pro:lib2 wans$ git add README.md
// 將暫存區(qū)內(nèi)容提交到版本庫(kù)
wanss-MacBook-Pro:lib2 wans$ git commit -m "hello git"
  • 工作區(qū)與版本庫(kù)
  1. 工作區(qū):項(xiàng)目的目錄
  2. 版本庫(kù):工作區(qū)有一個(gè)隱藏目錄.git目錄
  3. 暫存區(qū):稱為stage(或者叫index),保存版本庫(kù)中所有通過(guò)git add命令添加的修改,可提交狀態(tài)。
示意圖
管理修改

1.修改README.md文件后

wanss-MacBook-Pro:lib2 wans$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

2.添加修改到已暫存狀態(tài)

wanss-MacBook-Pro:lib2 wans$ git add README.md
wanss-MacBook-Pro:lib2 wans$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   README.md

3.提交修改

wanss-MacBook-Pro:lib2 wans$ git commit -m "modified README.md"
wanss-MacBook-Pro:lib2 wans$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean

4.提交到遠(yuǎn)程分支

wanss-MacBook-Pro:lib2 wans$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 247 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/wans/Documents/gittest/home2/../lib2.git/
   6225363..03f2080  master -> master
wanss-MacBook-Pro:lib2 wans$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
wanss-MacBook-Pro:lib2 wans$
撤銷(xiāo)修改

根據(jù)工作區(qū)/暫存區(qū)/版本庫(kù)的狀態(tài)跳轉(zhuǎn)圖:

示意圖

補(bǔ)充: 從staged >> unstracked: git rm --cached file

  1. git revert 撤銷(xiāo) 某次操作,此次操作之前和之后的commit和history都會(huì)保留,并且把這次撤銷(xiāo)。
  2. git reset –mixed 默認(rèn)方式,不帶任何參數(shù)的git reset,只保留源碼,回退commit和index 信息。
  3. git reset –soft 回退到某個(gè)版本,只回退了commit,不會(huì)恢復(fù)index file一級(jí),如果需要提交直接commit就好。
  4. git reset –hard 回退到某個(gè)版本,文件全部回退到當(dāng)前版本,不可恢復(fù)。

反撤銷(xiāo):git reflow;git reset —hard commitcode;

分支操作
// 創(chuàng)建新分支
git branch dev
// 切換到新分支
git checkout dev
// 創(chuàng)建新分支并切換到新分支
git checkout -b dev
// 放棄當(dāng)前分支修改切換到新分支
git checkout -f dev
// 查看所有分支
git branch -a

// 刪除分支名
git branch -d dev

// 更新遠(yuǎn)程已刪除分支
git fetch -p
// 更新遠(yuǎn)程新分支
git fetch
// 查看本地分支對(duì)應(yīng)的遠(yuǎn)程分支關(guān)系
git branch -vv

// 獲取遠(yuǎn)程分支
git checkout -b dev origin/dev
對(duì)比與合并
// 將指定分支的修改合入當(dāng)前分支
git merge dev
// 解決沖突
git mergetool file
// 選擇另一分支提交記錄合并到當(dāng)前分支
git cherry-pick commitcode

// 查看尚未暫存的文件的修改
git diff
// 查看已經(jīng)暫存起來(lái)的文件(staged)和上次提交時(shí)的快照之間(HEAD)的差異
git diff --cached
// 查看當(dāng)前和HEAD的差別
git diff HEAD
// 將兩個(gè)分支最新的提交做對(duì)比
git diff master dev

// 查看簡(jiǎn)單的diff結(jié)果 追加--stat

// 比較兩次提交的差異
git diff HEAD^ HEAD
git diff SHA1 SHA2

git對(duì)比和合并默認(rèn)在命令行中操作,可配置beyondcompare等第三方可視化比對(duì)工具。配置自定義diff與merge工具

拉取與推送(pull&&push)
// 提交當(dāng)前暫存區(qū)修改
git commit -m "message"
// 提交當(dāng)前修改與暫存的修改
git commit -a -m "meaage"
// 將當(dāng)前修改追加到最近一次提交,不生成新的提交記錄
git commit --amend

// 推送當(dāng)前分支到遠(yuǎn)程倉(cāng)庫(kù)(已關(guān)聯(lián)遠(yuǎn)程分支)
git push
// 未關(guān)聯(lián)遠(yuǎn)程分支
git push --set-upstream origin dev
// 推送到遠(yuǎn)程分支(如果遠(yuǎn)程沒(méi)有,則創(chuàng)建一個(gè)新的分支)
git push origin master
// 推送到遠(yuǎn)程分支目錄
git push origin HEAD:release/3.0

// 拉取遠(yuǎn)程指定分支
git pull origin master

// 刪除遠(yuǎn)程分支
git push origin :<branchName>
git push origin --delete <branchName>

標(biāo)簽
// 查看所有tag
git tag

// 當(dāng)前分支的最新提交打一個(gè)tag
git tag release1.0

// 當(dāng)前分支某一次提交打一個(gè)tag
git tag release1.0 commitcode

// 刪除標(biāo)簽
git tag -d release1.0

// 推送標(biāo)簽到遠(yuǎn)程
git push origin <tagname>
// 推送所有標(biāo)簽到遠(yuǎn)程
git push origin --tags
// 刪除遠(yuǎn)程標(biāo)簽
git push origin :refs/tags/<tagname>
git push origin --delete tag <tagname>

// 獲取標(biāo)簽生成新的分支
git checkout -b branch_name tag_name

忽略文件(.gitinore)
子模塊
git submodule add *.git
git submodule init
git submodule update

git clone --recursive *.git
參考資料

Pro Git

Git教程

Git Submodule使用完整教程


以上主要用于自己總結(jié)常用git命令,后續(xù)也會(huì)持續(xù)更新,其中摘錄了部分網(wǎng)絡(luò)的文字與圖片,侵刪。

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

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

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,852評(píng)論 9 163
  • Git是目前最流行的版本管理系統(tǒng),也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,974評(píng)論 1 17
  • 人往高處走是人生追求,人往低處走是追求人生。 往往下者最難達(dá)到。 低調(diào)為人,坦然處世為老子道學(xué)之說(shuō)… 然而...
    劉曉車(chē)閱讀 382評(píng)論 0 0
  • 昨天晚上,我和全國(guó)的家長(zhǎng)朋友一起聆聽(tīng)了愛(ài)、自然、生命力體系的一節(jié)微課《孩子愛(ài)哭、膽小怎么辦?》 對(duì)于這樣一個(gè)話題,...
    雯雯媽媽育兒先育己家庭教育隨筆閱讀 395評(píng)論 0 2
  • 如果你覺(jué)得你會(huì)離開(kāi),那說(shuō)明你未曾來(lái)過(guò)上大學(xué),集體的觀念比高中淡化很多,更加注重的是個(gè)人的發(fā)展。說(shuō)真的,好久都沒(méi)有和...
    scarqin閱讀 171評(píng)論 2 1

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