git常用命令

題外話:

本人個人博客www.kurby.top 歡迎訪問。以後博客都會同步到個人博客和CSDN上,CSDN只作爲技術的分享,個人博客會多一些內容,當做我個人的小屋。如有興趣,歡迎訪問。

廖雪峯‘s Git


本人以後的博客轉移到個人小站: https://www.kurby.top/ 本小站作爲個人的生活、編程、胡思亂想等記錄站點,歡迎大家來訪問。

Git的誕生

先是因爲CVS、SVN都是付費的,不符合開源精神,後來 BitKeeper 的東家BitMover公司出於人道主義精神,授權Linux社區免費使用這個版本控制系統。 後來有個Linux的牛人把BitMove給破解了,所以LinuX無法免費使用了,Linus大佬用了兩週時間用C寫出了一個分佈式的版本控制系統Git,此乃神人也~

Git的安裝

Git下載,可以自己根據自己的操作系統選擇,我爲了方便用的是windows的,

安裝完成後,運行git bash ,彈出一個命令行的東西,說明安裝成功了。

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

創建版本庫

創建一個文件夾、git init 把當前目錄設置成Git可以管理的倉庫:

$ mkdir learngit
$ cd learngit
$ git init

如果你沒有看到.git目錄,那是因爲這個目錄默認是隱藏的,用ls -ah命令就可以看見。

上傳文件放到Git倉庫

git add && git commit

第 一步,用命令git add告訴Git,把文件添加到倉庫:

$ git add readme.txt

第二步,用命令git commit告訴Git,把文件提交到倉庫:

簡單解釋一下git commit命令,-m後面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄裏方便地找到改動記錄。

爲什麼Git添加文件需要addcommit一共兩步呢?因爲commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

我們已經成功地添加並提交了一個readme.txt文件,現在,是時候繼續工作了,於是,我們繼續修改readme.txt文件,改成如下內容:

Git is a distributed version control system.
Git is free software.

git status

現在,運行git status命令看看結果:

$ git status
On branch master
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.txt

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

git status命令可以讓我們時刻掌握倉庫當前的狀態,上面的命令輸出告訴我們,readme.txt被修改過了,但還沒有準備提交的修改。

git diff

雖然Git告訴我們readme.txt被修改了,但如果能看看具體修改了什麼內容,自然是很好的。比如你休假兩週從國外回來,第一天上班時,已經記不清上次怎麼修改的readme.txt,所以,需要用git diff這個命令看看:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.

git diff顧名思義就是查看difference,顯示的格式正是Unix通用的diff格式,可以從上面的命令輸出看到,我們在第一行添加了一個distributed單詞。

知道了對readme.txt作了什麼修改後,再把它提交到倉庫就放心多了,提交修改和提交新文件是一樣的兩步,第一步是git add

$ git add readme.txt

同樣沒有任何輸出。在執行第二步git commit之前,我們再運行git status看看當前倉庫的狀態:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   readme.txt

git status告訴我們,將要被提交的修改包括readme.txt,下一步,就可以放心地提交了:

$ git commit -m "add distributed"
[master e475afc] add distributed
 1 file changed, 1 insertion(+), 1 deletion(-)

提交後,我們再用git status命令看看倉庫的當前狀態:

$ git status
On branch master
nothing to commit, working tree clean

git log

查看版本控制的記錄

git log --pretty=oneline 就查看一行有那些版本

上圖中的(HEAD ->master)表示的就是當前使用的版本

首先,Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100

想要回到add something 要用

git reset --hard HEAD^ 表示要回到上一個版本

圖中可以看到版本變成了 add something 的版本了

但是要注意的是咱們執行git log 只有2個版本了,add lpl的版本不見了!咋辦很慌啊?

git reflog

可以記錄咱們的git reset 的所有操作 ,我們只有git reset --hard xxx 就行了。

git checkout –

撤銷更改的文件。 注意: 這裏和git checkout 不一樣 有 –

可以撤銷已經git add file和git checkout – file的文件回到之前的狀態

注意: 還可以用 git reset HEAD readme.txt 功能和git checkout – 一樣的。

git rm xxx

添加了一個文件到版本庫之後,如果這個文件刪除了,那麼git status的時候就會顯示這個文件已經刪除了,如果不要這個文件了,可以 git rm xxx 從本地版本庫中刪除xxx文件。

https://www.liaoxuefeng.com/wiki/896043488029600/900002180232448 學到

遠程倉庫

添加遠程倉庫

自己在github上創建一個倉庫

現在,我們根據GitHub的提示,在本地的learngit倉庫下運行命令:

$ git remote add origin michaelliao/learngit.git

請千萬注意,把上面的michaelliao替換成你自己的GitHub賬戶名,否則,你在本地關聯的就是我的遠程庫,關聯沒有問題,但是你以後推送是推不上去的,因爲你的SSH Key公鑰不在我的賬戶列表中。

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

下一步,就可以把本地庫的所有內容推送到遠程庫上:

$ git push -u origin master

問題

1、git有時候會報這樣的問題

ERROR: Repository not found.fatal: Could not read from remote repository. Please make sure you have the correct access rightsand the repository exists.

解決方案是

git remote set-url命令修改remote URL

git remote set-url傳遞兩個參數

  • remote name。例如,origin或者upstream
  • new remote url。例如,[email protected]:USERNAME/OTHERREPOSITORY.git
git remote set-url origin [email protected]:xxxxxx/xxxxxx.git

查看是否成功

$ git remote -v origin    
https:YourUserName/YatouTest00123.git (fetch)origin    https:YourUserName/YatouTest00123.git (push)

2、 可能是本地命令行 ping github.com ping不同 ,是DNS的問題,可以從別人的電腦複製一個過來

https://blog.csdn.net/jackli_git/article/details/72861546

另外:重新定義origin的路徑

$ git remote set-url origin [email protected]:Kurby96/test.git

從遠程倉庫克隆到本地

$ git clone [email protected]:michaelliao/gitskills.git

注意把Git庫的地址換成你自己的,然後進入gitskills目錄看看,已經有README.md文件了:

$ cd gitskills
$ ls
README.md

分支管理

git checkout -b xxx 或 git switch -c xxx

創建新的分支,然後切換到新分支

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b參數表示創建並切換,相當於以下兩條命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

git branch xxx

創建xxx分支

git branch -d XXX

刪除xxx分支

git branch

這個後面沒有參數的就是查看當前所有的分支有什麼, git branch命令會列出所有分支,當前分支前面會標一個*號。

git branch -d和git branch -D xxx

git checkout xxx 或 git switch xxx

切換到xxx分支

git merge

合併分支,這種是快進模式合併,速度快,並不是每次都能快速合併。

eg:先切換到master分支(也可以是其他分支)去,然後合併你想要合併的分支。

$ git checkout master
$ git merge dev  

git log --graph

命令可以看到分支合併圖。

git merge --no-ff xxx

不用Fast forward模式進行合併分支。

image.png

上圖的這種合併,就是--no-ff這種合併方式,一個項目從黑色字的master分支,迭代了2個版本到黑色head處,現在想要把黑色的head合併到master,而且還有保存黑字master的版本,就要用--no-ff這種合併方式。

git stash

我們更改了數據之後,如果想切換到另一個分支,就需要git add xx,然後git commit -m “xxxx”,先存一下,才能切換。

如果我們不想這麼操作,可以用git stash,它會存到一個stash鏈表裏,

$ git stash list    	 ----查看當前存儲的東西

$ git stash apply  	---恢復stash內容不刪除

$ git stash drop  	----刪除

$ git stash pop    	-----恢復的同時,內容也清除

$ git stash apply stash@{0}    -----恢復指定的stash 括號內是list的順序

git remote

查看遠程分支的名稱

git remote -v ---------查看遠程倉庫的信息

git pull

如果其他人在git push origin xxx ,而且此時你也在git push origin xxx,就會出錯,因爲遠程的內容比你的新,這時你就可以用,git pull把最新的提交從origin/dev抓下來,然後本地合併,解決問題,再推送。

git pull也失敗了,原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示,設置devorigin/dev的鏈接:

$ git branch --set-upstream-to=origin/dev dev

再git pull,如果合併之後,可能會有問題,手動解決,然後再push。

git checkout -b branchName origin/branchName

在本地創建與遠程一樣的分支,

git checkout -b branchName則是在本地當前分支基礎上創建分支。

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

查看分支結構。

git rebase

重新使git log --graph --pretty=oneline --abbrev-commit得到的分支變成一條直線。

git tag name

創建一個標籤

git tag <name> <commit id> 		 -----打標籤

git tag -a  -m "blablabla..."    -----可以指定標籤信息
git tag                          ----查看標籤信息
git tag -d v0.1                  ----刪除標籤
git push origin <tagname>        -----推送標籤到遠程
git push origin --tags           ------推送本地所有標籤到遠程
如果標籤已經推送到遠程,要刪除,需要從本地和遠程分別刪除
git tag -d v0.1					  --本地刪除
git push origin :refs/tags/v0.1   --遠程刪除

.gitignore

忽略git的文件

如果文件被忽略了,可以使用git add -f xxx ,強制添加到git

git check-ignore -v xxx -----查看忽略的文件的規則

設置別名

$ git config --global alias.st status            ----其中st 是status的別名

h origin -----推送標籤到遠程
git push origin --tags ------推送本地所有標籤到遠程
如果標籤已經推送到遠程,要刪除,需要從本地和遠程分別刪除
git tag -d v0.1 --本地刪除
git push origin :refs/tags/v0.1 --遠程刪除




#### .gitignore

忽略git的文件

如果文件被忽略了,可以使用git add -f xxx ,強制添加到git

git check-ignore -v xxx    		 -----查看忽略的文件的規則

### 設置別名

```sh
$ git config --global alias.st status            ----其中st 是status的別名

本博客參考廖雪峯git教程:廖老師網站官網,非常感謝廖老師的分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章