Git 簡介
- 一個開源的分布式版本控制系統
- 版本控制?比如我在
A1
,A2
,A3
,A4
處分別修改了文件,那我可以隨時隨地回到任意AX
處
Git 安裝和配置(windows)
- 下載安裝exe,官網太慢,所以建議用淘寶鏡像
- 安裝完畢,找到
Git -> Git Bash
,打開 - 全局配置用戶名和郵箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
- 局部配置把
--global
去掉即可
Git 的 工作區 、 暫存區、 master
工作區即打代碼的地方,暫存區又叫stage,index用來暫時存放工作區中修改的內容,就是一個中轉站,master是項目主分支,HEAD是指針
我最常用的命令
git add .
git commit -m 'update'
git push origin master
git fetch origin master
如果 fetch 合并遠程庫報錯,提示 error: Your local changes to the following files would be overwritten by merge
說明文件有改變,解決:
- 如果想改變本地庫,保留遠程庫,執行
$ git reset --head
,徹底回退上一個版本,使用$ git pull
將遠程庫覆蓋本地庫 -
(未測試過)如果想保留遠程庫的修改,只將本地庫的新內容添加至遠程庫,執行
$ git stash,$ git pull,$ git stash pop
Git 常用命令
文件夾中打開Git方式: 文件夾中右鍵 -> Git Bash Here
-
初始化
-
$ git init
初始化,將這個目錄變成Git可管理的倉庫 ,.git文件夾 - 用來跟蹤管理版本庫 - 注 ?windows系統自帶的記事本在開頭添加了0xefbbbf字符(16進制字符),所以網頁打開第一行可能會顯示一個 '?' ,所以能不用盡量別用
-
-
增加、刪除文件
-
$ git add [file1] [file2]
添加指定文件到暫存區 -
$ git add [dir]
添加指定目錄到暫存區 ( 包括子目錄 ) -
$ git add .
添加修改和新建的文件到暫存區,但不包括被刪除的文件 -
$ git add -u
更新所有變化的文件,即提交工作區所有變化的文件到暫存區 -
$ git add -A
提交已被修改和已被刪除的文件,但不包括新的文件 -
$ git rm [file1] [file2]
刪除工作區文件,并把它放入暫存區 -
$ git rm --cached [file]
停止跟蹤指定文件,該文件在工作區位置不變 -
$ git mv [file] [file-rename]
重命名文件,并把改名操作放入暫存區
-
-
提交
-
$ git commit [file1] [file2] -m "message"
提交暫存區中指定文件到倉庫中 -
$ git commit -m "message"
提交暫存區所有內容至倉庫中 -
$ git commit -a
提交工作區自上一次commit以后的變化文件,至倉庫中 -
$ git commit --amend -m "message"
用新的commit,替代上一次提交和提交信息 -
$git commit -v
提交時顯示diff(文件差異)信息
-
-
分支
-
$ git branch
顯示分支列表和當前分支(帶*
號的) -
$ git branch -a
顯示本地分支列表和遠程分支列表和當前分支(帶*
號的) -
$ git branch [branch]
新建分支 -
$ git checkout [branch]
切換分支 -
$ git checkout -b [branch]
新建并切換分支 -
$ git checkout -
切換至上一個分支 -
$ git merge [branch]
合并指定分支到當前分支 -
$ git merge --no-ff -m "message" [branch]
用普通模式合并,合并后的歷史中有分支信息,而fast forward ( 默認 ) 合并在歷史中是看不出曾經做過合并 -
$ git branch -d [branch]
刪除一個分支 -
$ git rebase
作用 : 使提交歷史干凈,整潔
-
合并分支時,如果沒有文件沖突可正常合并,如果有沖突文件(比如兩個一樣的),Git會告訴我們,Automatic merge failed; fix conflicts and then commit the result
文件合并沖突,必須手動解決以后再提交,這時在Git會在文檔中用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,,修改時注意他們只能留一個,箭頭和等號要刪除。然后提交,合并完成。
- 撤銷
-
$ git checkout [file]
撤掉暫存區指定文件到工作區 -
$ git checkout .
撤銷暫存區所有文件到工作區 -
$ git reset [file]
重置暫存區指定文件,與上一次commit一致,但工作區不變 -
$ git reset --hard
重置暫存區與工作區,與上一次commit一致 -
$ git reset --hard [HEAD]
回退到某個版本,同時也會重置暫存區和工作區,HEAD代表指針,其值可以是,HEAD^
上一個版本,HEAD^^
上兩個版本, ... ,HEAD~100
上100個版本,或者指定版本號8817bcf
-
$ git stash
用于保存工作進度,暫存區和工作區的改動將保存起來,當前將是一個干凈的工作區,比如用于修復bug時,把文件先保存起來,這時可以在另外的分支或當前分支處理bug -
$ git stash list
查看stash隊列 -
$ git stash apply
恢復隊列中第一個記錄$ git stash drop
刪除stash里的內容$ git stash pop
恢復并stash里的內容 -
$ git stash apply [stash]
恢復指定的記錄,可以在列表中查看,比如:stash@[0]
,把apply
換成pop
可以恢復并刪除
-
當你改亂了工作區某個文件時,想要撤銷修改可使用 $ git checkout [file]
當你不但改亂了工作區某個文件,還添加到了暫存區時,想要撤銷時分兩步,重置暫存區文件 $ git reset [file]
,撤銷工作區修改$ git checkout [file]
,或者一步到位重置暫存區與工作區 $ git reset --hard
當你改亂了,還添加到暫存區,還提交到倉庫了,想要撤銷需要使用版本回退,比如回退到上一個版本 $ git reset --hard HEAD^
-
查看信息
-
$ git status
獲取倉庫當前狀態 -
$ git log
查看當前分支的版本歷史 -
$ git reflog
查看所有版本號,由此可以穿梭未來,回到過去 -
$ git log -S [keyword]
根據關鍵詞,搜索提交歷史 -
$ git log -[n] --pretty --oneline
以簡寫的形式顯示過去n次的提交信息,顯示所有去掉-[n]
,顯示完整的版本號--pretty=oneline
-
$ git diff
顯示暫存區和工作區的代碼差異
-
-
遠程倉庫
-
$ git remote
查看遠程庫信息,后面加-v
查看詳細信息 -
$ git remote add origin git@github.com:username/projectname.git
把本地項目與遠程項目關聯 -
$ git push origin [branch-name]
把本地項目推送至遠程項目對應的分支上,origin是默認的主機名,第一次使用會提示驗證,輸入yes即可 -
$ git push origin --delete [branch]
刪除遠程分支 -
$ git clone git@github.com:username/projectname.git
把遠程項目克隆至本地,git支持多種協議,默認的git://使用ssh協議,也可使用https協議,但傳輸速度要慢 -
$ git checkout -b [branch-name] origin/[branch-name]
在本地創建和遠程分支對應的分支,使用時,本地和遠程分支的名稱最好一致 - 如果與遠程庫相連? 1. 在 c盤 -> user > .ssh > 找到 id_rsa.pub 這是公鑰,還有一個是秘鑰,右鍵記事本打開復制,粘貼到 github -> 設置 -> ssh key -> 新建一個 名稱隨意,內容粘貼。如果沒有秘鑰使用
$ ssh-keygen -t rsa -C 'YourEmail@example.com'
生成,再沒有卸載Git重裝 2. 項目關聯或者克隆隨意 3. 公鑰的位置要在環境變量中配置好才能生效,所以生成秘鑰最好在默認的位置。 - 關聯失敗? 可能是遠程庫創建時生成了RENAME文件造成內容與本地庫不符,使用
$ git pull origin master
抓取遠程庫與本地庫同步 - 一個項目關聯 github 和 gitee ? 先把公鑰配置好,然后刪除現有的origin的遠程庫
$ git remote rm origin
,再使用$ git remote add origin git@github.com:username/projectname.git
分別連接 github 和 gitee ,修改origin
為 github 執行一次,再修改為origin
為 gitee 再執行一次,查看$ git remote -v
時可以看到有兩個遠程庫,推送時需要給定特殊的名稱,ex:$ git push github master
-