您好,登錄后才能下訂單哦!
一、git:一個免費的并且開源的分布式版本控制系統
版本控制:保留文件中修改的歷史記錄,可以方便的撤銷||恢復之前對文件的操作修改。
版本控制帶來的好處:
a.不小心刪除文件,可以通過記錄找回
b.產品經理反反復復讓你修改的時候,可以通過版本控制輕松反復
c.清楚了解自己最近處理過哪些部分
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
git config命令的--global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置
分布式版本控制:
單人開發項目的時候,我們可能為了方便,公司一臺,家里一臺,這時候我要使用同一個倉庫進行記錄。
我們可以選擇使用U盤、網盤等存儲設備進行拷貝。
但是一旦項目龐大,我們就這樣的方式就很麻煩了,而且極有可能產生各種沖突問題。
分布式和集成式的對比:
集成式:
直接連通中央倉庫,由中央倉庫存儲操作記錄及項目代碼,比如SVN
需要連接中央倉庫、需要網絡
記錄保存在中央倉庫,一旦中央倉庫內的記錄丟失,沒有備份
分布式:
在每個人的電腦上都有一個.git本地倉庫,操作記錄保存在本地,如GIT
可無網絡辦公,等有網絡再推送遠程倉庫
通過對比我們可以看出分布式版本控制,對于工作環境要求限制更少,對資料的保護性更好,不容易丟 失。所以越來越多的人拋棄SVN,走上了Git的道路
Github就充當了我們說的中央倉庫。
當然在這里我們需要的只是中央倉庫,這個倉庫也可以Coding 、gitlab、Bitbucket 等等。
二、github:一個專門托管代碼并且實現版本控制的軟件,git比github早出現了3年,為開源項目免費提供Git存儲
三、git的入門命令,使用Git Bash操作命令行
(1)、git init:初始化本地倉庫;,通過git init命令把這個目錄變成Git可以管理的倉庫
通過這個命令,可以創建一個本地.git倉庫,.git文件(默認是隱藏文件)
.開頭的文件是隱藏文件,所以需要設置讓其出現
touch a.txt //創建a.txt文件
git status:查看當前倉庫所在目錄的文件狀態
on branch master:在哪個分支上
no commits yet:還沒有提交過
untracked files:當前的這個文件是沒有被追蹤的,git當它是不存在的,通過命令:
(2)、git add a.txt:來將這個文件提交給git,告訴倉庫,這是我需要你管理的東西。add是添加文件下所有的文件
通過這樣的方式,我們可以把文件/文件夾托管給git
(3)、git commit
把文件/文件夾托管給倉庫后,我們不能像編輯器一樣,什么都讓倉庫進行記錄,所以在這里,
我們采用主動提交的方式,去提交我們希望Git倉庫記錄的操作。
git commit
如果你是第一次進行提交,你會發現提交失敗
因為Git除了需要你主動提交以外,還需要記錄當前是誰提交的
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
在全局下設置用戶email和name,只需要設置一次,后期提交的時候,會自動讀取配置信息
git config --global -l 獲取設置的郵箱和用戶名
進入了vim編輯器,出現這種情況是因為,需要在commit的時候附帶一個信息,描述你提交是做了什么的描述文字。按住i進入文字編輯插入模式 => 在最上面輸入本地提交的描述信息
然后按下esc退出編輯插入模式 => 按下ZZ(大寫)保存退出。
(4)、git log:查看已經提交的文件信息,所有批次的提交信息,按q退出,然后再接著輸入命令
git log --pretty=oneline
git log --pretty=format:"%H %h"
通過git log 哈希值:可以只查看某一次的提交信息
git log -p:查看最近一次的提交信息,同時顯示diff的信息,詳細信息的打印
git log -2:只打印2條信息
以上操作都是操作本地倉庫,untracked files不用管它
每次操作:
首先git status,查看文件狀態,看看哪些文件修改了
然后git add,將修改文件提交到暫存區,
git add . 將本地倉庫全部文件提交到暫存區
然后 git cimmit -m 描述文字,提交到本地倉庫
以上操作步驟,缺一不可。
不過可以簡寫命令行:git commit -a -m '描述文字'(只有在文件是已經暫存的情況下才可以使用簡寫命令操作,untracked files是不可以直接使用簡寫命令行的,需要先add,然后commit,分開來)
(5)、git rm ‘文件名’:刪除文件
git rm a.txt
git commit -m 刪除a文件
☆如果文件在暫存區,也就是git add .,但是還沒有git commit,那么是不允許刪除該文件的,如果確實要刪除,那么 :
git rm -f c.txt //強制刪除
git commit -m 刪除c文件
☆如果想把文件從git倉庫刪除,但是保留本地工作目錄中的文件,也就是該文件從git倉庫的文件變成了untracked files文件
git rm --cache a.txt
git commit -m 刪除a文件
要想再次提交該文件到git倉庫,先git add .,然后git commit -m 提交a文件
(6)、移動文件
新建文件夾:mkdir reci //創建了一個文件夾
git mv a.txt reci/a.txt //將a文件移動到reci文件夾下面
git add .
git commit -m 移動a文件到reci文件夾下
(7)、git status:打印文件狀態(未追蹤、已修改、已暫存)
git status -s = git status --short 簡化文件狀態打印內容
**(8)、git diff**:查看文件修改了哪些地方 (主要看工作區文件)
只在文件已經被修改,但是還未add的情況下,可以查看,如果已經add就不可以查看修改的情況了
git diff --staged:查看暫存區和提交區域之間的差異
** (9)、git reset**:返回文件到之前的版本
git reset --hard HEAD^ //返回上一個版本
git reset --hard HEAD^^ //返回上上一個版本
git reset --hard HEAD~·100 //返回往上100個版本
回退到未來的版本
git reset --hard d93ccfb4a9f6a5971c4a2481f927202a4cf66d49 //對應版本的哈希值
**(10)、git reflog**用來記錄你的每一次命令,找到對應修改的commit id
穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。
要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。
**(11)、創建SSH Key**
C:\Users\xiaoxiao\.ssh 這就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
**(12)、push提交代碼到github**
git push origin master,把本地master分支的最新修改推送至GitHub。
**(13)、從遠程庫clone到本地庫**
git clone git@github.com:yourname/gitskills.git
**(14)、常用命令行**
$ pwd :(print working directory) 查看當前所在路徑--絕對路徑
$ ls:(list) 查看當前目錄下的內容
$ mkdir(make directory) 創建目錄
$ touch 創建文件
$ cat 查看文件內容(一次性將內容全部顯示)
$ q 退出
$ clear 清屏
**(15)、分支管理**
在Git里,主分支,即master分支
HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長;
當我們創建新的分支,例如dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上。
不過,從現在開始,對工作區的修改和提交就是針對dev分支了,比如新提交一次后,dev指針往前移動一步,而master指針不變。
假如我們在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最簡單的方法,就是直接把master指向dev的當前提交,就完成了合并。
并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支。
Git鼓勵大量使用分支:
查看分支:git branch
創建分支:git branch name
切換分支:git checkout name
創建+切換分支:git checkout -b name
合并某分支到當前分支:git merge name
刪除分支:git branch -d name
** (16)、錯誤集結**
(a)。*git add readme.txt報錯 pathspec 'readme.txt' did not match any files*
說明在本地目錄里沒有這個文件。
解決辦法
1.手動創建一個文件 readme.txt
2.然后再使用git命令創建這個文件,命令為:$ touch readme.txt
3.$ git add readme.txt,不用管該文件路徑
**17、提交對象**
18、創建分支
git branch:查看當前所在的分支
git branch branch2:創建分支branch2
git checkout branch2:切換分支到branch2
git checkout -b branch2:合并操作,開分支并且切換到新分支
四、上傳文件到github—遠程倉庫
1、首先新建倉庫
倉庫名稱、倉庫信息描述、公開還是私有、初始化一個readme文件、add .gitignore、add a license等等
2、新倉庫創建完畢之后,會看到以下提示信息
2.1、git ssh原理以及與https的區別
HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼【輸入密碼時git bash不會顯示密碼】;
SSH:clone的項目你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置SSH key的時候設置了密碼,則需要輸入密碼的,否則是不需要輸入密碼的,推薦使用SSH密鑰,誰想要參與當前項目的開發,就添加誰的SSH密鑰
2.2、在git中使用SSH Key的步驟:
檢查電腦是否存在SSH Key:
$ cd ~/.ssh
$ ls
如果存在id_rsa.pub 或 id_dsa.pub 文件,說明文件以及存在,跳過創建SSH Key步驟。
創建SSH Key
$ ssh-keygen -t rsa -C "your_email@example.com"
return后(出現如下命令)會讓你輸入push時的密碼(不是git登錄密碼),一般推薦濾過,直接按enter:
Generating public/private rsa key pair.
出現如下命令說明SSH Key創建成功了:
復制代碼
Your identification has been saved in /Users/shenheping/.ssh/id_rsa. Your public key has been saved in /Users/shenheping/.ssh/id_rsa.pub. The key fingerprint is: SHA256:sodR52iO2z6KZOaHjElmjlGtTu8UbiZ2p+KXma4Rums shpyoucan@163.com The key's randomart image is: +---[RSA 2048]----+ |
|
---|---|
. . . | |
. . . + | |
.... o S . | |
..o . O | |
.X+=X== o | |
.E%O+.+. | |
+oo**.ooo. |
+----[SHA256]-----+
查看SSH Key:
$ cat ~/.ssh/id_rsa.pub
將查看的SSH Key賦值到git中設置好。
測試SSH Key:
$ ssh -T git@git.oschina.net
出現Welcome to XXX就可以了。
3、push本地文件到遠程倉庫
遠程倉庫的名稱默認是origin,origin中有單獨的master和HEAD分支,和本地倉庫中的HEAD或master并非一致
git push 提交到遠程倉庫
git clone 克隆項目到本地,從無到有的過程 git https://github.com/xiaoxiao529/javascript-note.git
拉取的都是master分支上的內容
git pull 拉取 本地有遠程項目,然后同事對遠程項目又做了新的修改,就需要git pull,如果和本地的有沖突,就需要解決沖突
github上,創建新倉庫,直接創建,不要點Initialize this repository with a README前面的選擇框
創建.gitignore文件,里面寫上規則,第一步!!如果是vue-cli,那么不用手動創建,已經創建好了。反正就是創建github倉庫的時候,不要勾選初始化README文件!!
git add .
git commit -m 'webpack-word' 提交到暫存區不能少
git remote add origin git@github.com:xiaoxiao529/webpack-work.git
git push -u origin master 提交到遠程倉庫origin的master分支—主分支
★本次上傳了node_modules到github,要避免上傳,可以在目錄下創建.gitignore文件,里面填寫忽略的上傳文件
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
最后需要強調的一點是,如果你不慎在創建.gitignore文件之前就push了項目,那么即使你在.gitignore文件中寫入新的過濾規則,這些規則也不會起作用,Git仍然會對所有文件進行版本管理。
簡單來說,出現這種問題的原因就是Git已經開始管理這些文件了,所以你無法再通過過濾規則過濾它們。因此一定要養成在項目開始就創建.gitignore文件的習慣,否則一旦push,處理起來會非常麻煩。
五、github上 watch star fork的作用
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。