說在前面的話,本文是跟著張哥的 GitHub 系列教程操作的,張哥微信公眾號: googdev
霧艹….. 一直在出差(借口)… 看了一下兩個月沒寫博客了,真是太TM可怕了!!! 趕緊補一發,壓壓驚
git
註:在使用的任何的 git 命令前,都要切換到 git 項目目錄下
git init
初始化一個 git 倉庫git status
查看當前 git 倉庫的狀態git add file
修改 file 文件的狀態為添加,並沒有提交,只是存在緩存區git rm –cached file
更改 add 後的文件的狀態為無狀態(從緩存區移除)git config user.name yu 和 git config user.email [email protected]
添加 git 用戶,在進行提交之前如果沒有配置用戶會報錯,這是針對當前 git 倉庫的
git config –global user.name yu ,可以使用 –global 參數設置全局的git commit -m message
提交緩存區內容並附帶提交信息git log
顯示提交日誌git config core.autoclrf false
解決每次使用 git 命令 ( add , commit ) 的時候會報 warning: LF will be replaced by CRLF in XXXX
這是自動添加換行 ( linux 下格式) 引起的問題,可以使用 –global 參數設置全局有效git tag v1.0
為當前的狀態打個 v1.0 的標簽git tag
查看歷史 tag 記錄git branch
查看當前分支的情況git branch a
在當前的基礎上新建一個分支名字為 agit checkout a
切換分支到 agit checkout -b a
綜合上面兩個命令,如果 a 分支不存在,在當前基礎上創建分支 a 並切換到 agit checkout v1.0
切換到 tag v1.0 時的狀態git checkout ffd9f2dd68f1eb21d36cee50dbdd504e95d9c8f7
切換到某次 commit ,這個長序列是每次 commit 的 SHA1 值,可以使用 git log 查看git checkout test.txt
撤銷 test.txt 的改變,註 checkout 命令只能撤銷還沒有 add 進暫存區的文件git merge a 和 git rebase a
把 a 分支的內容合並到 master 分支,前提要先切換到 master 分支,兩個做法的區別是:
merge 是把 a 中的內容全部粗暴的合並進來,rebase 會先比較內容改變的順序,再按順序合並git branch -d a
刪除分支agit branch -D a
強制刪除分支agit config –global alias.co checkout
alias 為 checkout 起別名為 co,然後在輸入命令的時候,就可以使用 git co 替代 git checkout ,如果只針對當前倉庫 global 不是必須的git log 的 NB 的用法
git log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit –date=relative
格式化日誌的輸出,可以很清晰的展現日誌信息和分支走向
這麽難寫卻又牛逼的命令我們必須給起個別名:
git config –global alias.lg “log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit –date=relative”
然後就可以使用 git lg 就可以了git config –global color.ui true
給git的輸出著色git config –global core.quotepath false
設置顯示中文文件名
在沒設置顯示中文名之前,我創建了一個新文件 中文名.txt ,然後使用 git status 查看一下顯示如下:
設置顯示中文名後,顯示如下:
stash 命令
使用場景,如你正在一個分支 a 上修改著代碼什麽的,但是這時候,有一個緊急的任務,需要你切換到另一個分支 b 去做些工作,
而 a 上的代碼還是個半吊子,不想去 commit 甚至不想去 add ,這時候 stash 命令就大有用處了,前提是沒有執行 commitgit stash
把當前分支沒有 commit 的代碼先暫存起來,這時使用 git status 會發現分支很幹凈
git stash list
可以看到此時暫存區多了一條記錄
暫存成功後,你就可以切換到 b 去做其他的功能
b 分支的事情做完後,就可以再切換回 a 分支,繼續之前的工作git stash apply
執行後, a 分支之前的代碼就又回來了,然後做好把暫存區的 stash 記錄刪除git stash drop
就是把最近的一條 stash 記錄刪除, drop 後還可以跟 stash_id 來刪除指定的記錄
git stash pop
這個命令相當於同時執行了 apply 和 drop ,謹慎起見,使用 git stash list 查看一下是否確實刪除了該記錄
git stash clear
清空暫存區的所有記錄,drop 只是刪除一條,drop 後可以跟 stash_id 來刪除指定的記錄,不跟就是刪除最近的
沖突解決
假設我在 a 分支和本地分支上同時修改了文件 test.txt ,在合並啊時候就會出現沖突
用git diff可以查看沖突
解決沖突要做的就是修改沖突的文件 test.txt 為最終想提交的內容,並去掉其中的標識符
(標識符: ++<<<<<<< HEAD;++=======; ++>>>>>>>>)
修改然後 add 和 commit
GitHub
在向 GitHub 提交代碼前,需要 SSH 授權,因此要創建 SSH Key
生成 ssh key, 在 Git Bash 或者命令行中使用命令:
ssh-keygen -t rsa
rsa 算法生成密鑰,接著連續三個回車鍵(不需要輸入密碼),然後就會生成兩個文件 id_rsa 和 id_rsa.pub
命令執行結果會告訴你文件默認路徑, 其中 id_rsa 是密鑰( /c/Users/yu/.ssh/id_rsa ), id_rsa.pub 就是公鑰( /c/Users/yu/.ssh/id_rsa.pub )在github上添加 ssh key
進入自己的 GitHub 的設置界面,如圖:
點擊 New SSH Key 按鈕,並把上述 id_rsa.pub 中的內容填入下面 Key 輸入框中,如圖:
點擊 Add SSH Key 就可以了測試秘鑰是否成功
ssh -T [email protected]
第一次使用可能提示 github.com 無法驗是否證可信任,輸入 yes
開始跟GitHub打交道
clone GitHub上的項目到本地
在GitHub上創建一個新的項目/倉庫(或者用已有的), 假設名字是: github-study-test ,執行如下命令
git clone [email protected]:yuehongjie/github-study-test.git
這樣就把項目 clone 到了本地,這個時候本地項目本身就已經是一個 git 倉庫了,不需要執行 git init 進行初始化
而且甚至都已經關聯好了遠程倉庫,我們只需要在這個 github-study-test 項目下任意修改或者添加文件,然後進行 add 和 commit ,就像普通的本地 git 倉庫一樣如何獲取項目地址: 在 GitHub 上進入項目,點擊 Clone or download ,並選擇 Use SSH
向 GitHub 提交代碼命令
git push origin master
這樣就把本地項目提交到了 GitHub 遠程 master 分支
有時候在 push 之前先 pull 一下,把遠程最新的代碼更新到本地,命令
git pull origin master
關聯本地項目到 GitHub
如果我們本地已有一個完整的 git 倉庫,並且已經進行過很多次 commit 了,那麽上面的在 clone 方式就不合適了,這時就需要我們把本地的 git 倉庫關聯到遠程 GitHub 倉庫上在 GitHub 上新建一個項目假設為 test
把本地項目假設是 test2 關聯到遠程 test ,使用命令:
git remote add githuborigin [email protected]:yuehongjie/test.git
這樣就把本地倉庫和遠程倉庫關聯好了,命令中的 githuborigin 是一個遠程倉庫的別名,可以隨便起
起別名的原因是因為我們可能除了向 GitHub 提交,還可能向公司的的遠程倉庫提交,方便區別更新遠程倉庫到本地
這一步不是必須的,我這裏這麽做的原因是遠程倉庫新建的時候也創建了個 README.md 文件,而我本地沒有,pull 命令:
git pull githuborigin master
向 GitHub 提交本地倉庫的內容
git push githuborigin master
這裏我是提交到master分支,當然也可以提交到其他分支
p.s.可以使用 git remote -v 查看當前倉庫關聯了哪些遠程倉庫
git & GitHub
常用的操作命令:
在 master 分支新建一個叫 develop 的分支
git branch develop
註:新建分支是基於當前所在的分支基礎上進行的,即以上命令是基於 master 分支新建了一個叫 develop 的分支,此時 develop 分支跟 master 分支的內容完全一樣
切換到 develop 分支
git checkout develop
可以把上面兩個步驟和合並,新建並自動切換到 develop 分支:
git checkout -b develop
把 develop 分支推送到遠程倉庫
git push origin develop
註:該命令執行時如果遠程倉庫沒有 develop 分支則會報錯
把 develop 分支推送到遠程倉庫,如果遠程倉庫沒有該分支則會創建
git push origin develop:develop
註:develop:develop 的第二個 develop 是為遠程分支起的名字,可以隨便起,但推薦保持一致,以免混亂
查看本地分支列表
git branch
查看遠程分支列表
git branch -r
查看本地和遠程所有分支
git branch -a
刪除本地分支 a
git branch -d a
同時刪除本地多個分支(a、b)
git branch -d a b
強制刪除本地分支 a
git branch -D a
刪除遠程分支 develop2
git push origin :develop2
如果遠程有個分支 release ,而本地沒有,你想把遠程的 release 分支更新到本地
git checkout -b release origin/release
如果執行命令報錯:
>
error: pathspec ‘release’ did not match any file(s) known to git.
error: pathspec ‘origin/release’ did not match any file(s) known to git.
先執行如下命令:
git fetch
Tags: checkout message warning commit status
文章來源: