天津11选5开奖直播现场:Git教程-git是一種對修改的操作

作者: 魯智深 分類: linux 發布時間: 2018-01-19 22:06

天津11选5中奖结果 www.ebzvaz.com.cn Git是目前世界上最先進的分布式版本控制系統

安裝

1
sudo apt-get install git

安裝成功后,運行如下命令

1
git

安裝完成后,還需要最后一步設置,在命令行輸入:

1
2
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。

注意git config命令的–global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。

遠程倉庫

Git是分布式版本控制系統,同一個Git倉庫,可以分布到不同的機器上。首先找一臺電腦充當服務器的角色,每天24小時開機,其他每個人都從這個“服務器”倉庫克隆一份到自己的電腦上,并且各自把各自的提交推送到服務器倉庫里,也從服務器倉庫中拉取別人的提交??梢宰約捍罱ㄕ馓ǚ衿?,也可以使用GitHub網站

本地創建ssh key

先看一下是否有ssh key 如果沒有,就自行百度一下安裝openssh-server,一般linux下的系統都是默認有ssh

1
ps ajx|grep ssh #查看ssh的進程

本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的

創建項目的SSH Key

1
ssh-keygen -t rsa -C "[email protected]"

創建完成后,在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人

登錄github注冊或登錄賬號,打開“settings”的“SSH Keys”頁面,然后,點“New SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內容,點“Add Key”,你就應該看到已經添加的Key

創建遠程庫

登陸GitHub

在右上角找到“new repository”按鈕,創建一個新的倉庫

從遠程庫克隆

將github上的項目,克隆到本地一份

1
2
3
git clone git@github.com:賬號名/項目名.git
git remote #查看遠程庫信息
git remote -v #查看詳細信息

與遠程庫交互

將項目提交到遠程庫github

1
2
3
4
5
6
7
8
9
git init #初始化空的Git倉庫
git add * #添加到暫存區
git commit -m '1.0' #添加到master分支
git show 查看最近一次提交的記錄 #commit記錄

#github操作
#在github上面新鍵項目
git remote add origin git@github.com:luzhisheng/xxx.git #命令管理一組跟蹤的存儲庫
git push -u origin master#將master分支的內容上傳到github

遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。

-u 本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令,以后就只需要用,如下進行提交。

1
git push origin master

報錯問題

agent refused operation

agent refused operation

1
2
eval "$(ssh-agent -s)"
ssh-add

SSH警告:

當你第一次使用Git的clone或者push命令連接GitHub時,會得到一個警告:

The authenticity of host ‘github.com (xx.xx.xx.xx)’ can’t be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

這是因為Git使用SSH連接,而SSH連接在第一次驗證GitHub服務器的Key時,需要你確認GitHub的Key的指紋信息是否真的來自GitHub的服務器,輸入yes回車即可。

Git會輸出一個警告,告訴你已經把GitHub的Key添加到本機的一個信任列表里了:

Warning: Permanently added ‘github.com’ (RSA) to the list of known hosts.

這個警告只會出現一次,后面的操作就不會有任何警告了。

最后友情提示,在GitHub上免費托管的Git倉庫,任何人都可以看到喔(但只有你自己才能改)。

本地倉庫

創建空目錄

1
2
mkdir test7
cd test7

目錄結構圖如下:

init0

init0


在目錄下創建本地倉庫

1
git init

創建成功后,目錄結構如下圖:

init1

init1

版本庫就是一個目錄,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”

git版塊管理思維圖

工作區和版本庫

工作區和版本庫

本地倉庫分為三部分:工作區,暫存區,倉庫區,其中暫存區、倉庫區是版本庫部分

工作區與暫存區

使用IDE打開目錄,創建項目,將文件添加到暫存區

1
2
git add 文件1 文件2 ...
git add 目錄

使用暫存區的內容恢復工作區的內容

1
git checkout -- 文件名

查看暫存區的狀態

1
git status

將暫存區的記錄添加到倉庫區

1
2
3
4
git commit -m '本次提交的說明信息'
[master 1868b23] 本次提交的說明信息
1 file changed, 2 insertions(+) #1個文件已更改,2個插入(+)
create mode 100644 readme.txt #創建模式100644 readme.txt

查看倉庫區的歷史

1
2
3
4
當前版本的歷史版本:git log
q 退出log
簡版顯示:git log --pretty=oneline
歷史命令:git reflog

在Git中,用HEAD表示當前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100

查看修改內容

1
2
3
git diff HEAD -- 文件名 #對比工作區和倉庫區中某版本某文件的不同
git diff 文件名 #是工作區(work dict)和暫存區(stage)的比較
git diff --cached 文件名 #是暫存區(stage)和分支(master)的比較

撤消修改

git會提示:

1、add之前的話,使用 “git checkout — <文件>…” 丟棄工作區的改動

1
git checkout -- 文件

2、add之后,commit之前
使用 “git reset HEAD <文件>…” 以取消暫存
使用 “git checkout — <文件>…” 丟棄工作區的改動

1
2
git reset HEAD 文件
git checkout -- 文件

第1、2種情況,建議都直接用第2種方式,一次性解決

3、add之后,commit之后

回退歷史版本到暫存區

1
2
3
git reset HEAD^#上一個版本
git reset HEAD^^#上上的版本
git reset HEAD~100#指定第100個版本

回到某個版本

1
2
git reflog #查看版本
git reset --hard 版本號

刪除文件

從版本庫中刪除

1
2
3
rm 文件名
git rm 文件名
git commit -m '刪除說明信息'

刪除了文件,版本庫文件沒有刪除,可以恢復文件

1
git checkout -- test.txt

分支

分支存在的意義,假如你在開發一個新的功能是,我不能寫一點代碼提交一次代碼,這樣會影響污染環境代碼,如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風險。所有分支就出現了,我可以創建一個分支,我在分支上面干活,想提交就提交,直到開發完畢后,再一次性合并到原來的分支上,這樣,既安全,又不影響別人工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
git branch #有多少個分支并且查看當前分支
git log --graph #查看分支路線圖
git checkout -b develop #創建并切換到develop分支

-----
#在分支里面可以編寫你的代碼
-----
#編寫完成代碼提交到當前分支
git add 文件名
git commit -m "add 說明"

-----
git checkout master #切換回master分支
git merge develop   #將develop分支合并到master
git branch -d 分支名稱   #刪除分支

主分支master和dev分支都修改,合并沖突怎么辦?

1
2
3
4
5
cat 文件 #查看文件,有提示信息
vim 文件 #修改文件
git add 文件
git commit -m "說明"
成功

查看分支合并情況

1
git log --graph --pretty=oneline --abbrev-commit#查看日志

* d3478e7 add rc cc
|\
| * 042be06 add rc
* | 8091717 add cc
|/
* f356751 branch dev test
* 83101bd add test.txt

推薦工作方法:

分支合并信息,最正確的做法,重要:工作中一定要這么干!禁用fast forward合并模式(fast forward合并就看不出來曾經做過合并),如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit。我們用加參數的git log 就可以查看到分支合并信息

禁用fast forward 后git log

禁用fast forward 后git log

1
2
3
4
5
6
git checkout -b 分支名稱
vim 文件
git add 文件
git commit -m "說明"
git checkout master #切換分支
git merge --no-ff -m "說明信息" dev #--no-ff參數,表示禁用Fast forward

再次用git log 加參數的形式看日志

1
git log --graph --pretty=oneline --abbrev-commit

* 7748fd0 merge with no-ff #合并說明描述
|\
| * 8702335 fast #分支說明描述
|/
* d3478e7 add rc cc
* f356751 branch dev test
* 83101bd add test.txt
* 7893f7a pjl

工作中git log 圖

工作中git log 圖

暫時存儲內容

當手頭工作沒有完成時,先把工作現場git stash一下,然后去修復bug,修復后,再git stash pop,回到工作現場。

1
2
git stash #當前分支
git stash pop #刪除暫時存儲內容,并恢復暫存區

可以多次stash,恢復的時候,先用git stash list查看,然后恢復指定的stash,用命令:

1
git stash apply [email protected]{0}

如果要丟棄一個沒有被合并過的分支,可以通過git branch -D 強行刪除。

1
git branch -D 分支名稱

標簽

標簽作用: 在開發的一些關鍵時期,使用標簽來記錄這些關鍵時刻, 例如發布版本, 有重大修改, 升級的時候, 會使用標簽記錄這些時刻, 來永久標記項目中的關鍵歷史時刻;

1
2
3
4
5
6
7
git branch
git checkout master
Switched to branch 'master'

#默認標簽是打在最新的commit上面
git tag v1.0
git tag

如果我們忘了打標簽,比如我前天我剛發布一個重大的變革,而忘記記錄的這個時刻,那就可以找到commit id去打標簽。

1
2
3
4
git log --pretty=oneline --abbrev-commit#查看歷史commit記錄
git tag  <tagname> 6224937
git tag #查看歷史標簽
git show <tagname>#查看指定版本信息

還可以創建帶有說明的標簽,用-a指定標簽名,-m指定說明文字:

1
2
git tag -a <tagname> -m "版本說明信息" 3628164
git show <tagname> #能看到指定版本的信息

如果打錯標簽就刪除

1
git tag -d <tagname>

如果要推送某個標簽到遠程,使用命令

1
git push origin <tagname>

或者,一次性推送全部尚未推送到遠程的本地標簽:

1
git push origin --tags

如果標簽已經推送到遠程,要刪除遠程標簽就麻煩一點,先從本地刪除:

1
git tag -d v0.9

然后,從遠程刪除。刪除命令也是push,但是格式如下:

1
git push origin :refs/tags/v0.9

如果覺得我的文章對您有用,請隨意打賞。您的支持將鼓勵我繼續創作!

3條評論

發表評論

電子郵件地址不會被公開。 必填項已用*標注