初始化 git init 當前文件夾初始化 代碼提交 git add file/. 自動檢測工做區修改的內容提交到暫存區 git status 查看當前文件夾工做區的狀態:是否有內容修改 git commit -m '描述' 暫存區內容提交到倉庫 代碼回滾 git checkout file 暫存區回滾到工做區 git reset --hard '版本號' 回滾到指定版本的工做區 git reset --soft '版本號' 將指定版本回滾到暫存區 git reset --mix '版本號' 將指定版本回滾到修改過的內容 查看版本日誌 git log 查看日誌信息: 命令(版本號) 做者 時間 版本描述 git log --pretty=oneline 日誌信息:版本號 版本描述 git reflog 日誌信息:版本號縮寫(7位) HEAD(x) 命令 操做記錄 注:git log: 若回滾到以前的版本,後面的版本將不會顯示 git reflog會顯示全部版本信息 刪除文件 rm file git add/rm file git commit -m 'delete' 撤銷刪除操做 rm file git checkout --file 回滾至修改前的狀態 rm file git add file git reset HEAD file git checkout --file 回滾至提交到暫存區前的狀態 rm file git reset --hrad '版本號' 回滾至指定版本號
1. 初始化前端
git init 初始化,會生成一個.git文件, 全部版本信息都放在此文件 查看當前文件夾的狀態: git status 編輯代碼 ...
2. 提交代碼到暫存區 工做區 -> 暫存區vue
git add src 把代碼放入git 暫存區 # git add . 提交全部修改的文件 git status 此時剛纔add文件變成了綠色
3. 建立提交記錄(版本) 暫存區 -> 倉庫python
git commit -m '版本描述' 把代碼從暫存區放在git倉庫 stage->master git config --user.email 1271570224@qq.com git config --user.name zhangyafei git commit -m 'vue第一個版本' git status 此時已經爲空,表示提交的全部文件已經放在了git倉庫
4. 修改代碼:好比我修改了README.mdgit
git status 查看當前的代碼狀態 發現剛剛修改的文件變爲了紅色
5. 提交修改記錄github
git add . git commit -m '修改README描述
6.git log 查看git日誌
輸出:命令(版本號),做者,時間,版本描述app
fei@home-fei MINGW64 /e/前端/vue/vue學習/vue_project/luffy (master) $ git log commit 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c Author: 張亞飛 <1271570224@qq.com> Date: Wed Jan 23 10:47:56 2019 +0800 完善README描述 commit 7866d35d2af1691705047127a620ab293f29f8f8 Author: 張亞飛 <1271570224@qq.com> Date: Wed Jan 23 10:39:25 2019 +0800 vue第一個版本
7. git log --pretty=oneline
輸出:版本號,版本描述ssh
fei@home-fei MINGW64 /e/前端/vue/vue學習/vue_project/luffy (master) $ git log --pretty=oneline 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c 完善README描述 7866d35d2af1691705047127a620ab293f29f8f8 vue第一個版本
8. git reflog 查看全部版本操做
輸出:版本號 修改順序(最近修改的在前)gitlab
fei@home-fei MINGW64 /e/前端/vue/vue學習/vue_project/luffy (master) $ git reflog 1cf1f43 HEAD@{0}: reset: moving to 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c 7866d35 HEAD@{1}: reset: moving to 7866d35d2af1691705047127a620ab293f29f8f8 1cf1f43 HEAD@{2}: commit: 完善README描述 7866d35 HEAD@{3}: commit (initial): vue第一個版本
9. 回滾操做學習
$ git reset --hard 7866d35d2af1691705047127a620ab293f29f8f8 HEAD is now at 7866d35 vue第一個版本 $ git reset --hard 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c HEAD is now at 1cf1f43 完善README描述
10. 修改代碼fetch
$ 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: src/App.vue no changes added to commit (use "git add" and/or "git commit -a")
11. 撤銷修改
修改過的內容 -> 上一次提交的狀態
$ 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: src/App.vue no changes added to commit (use "git add" and/or "git commit -a") fei@home-fei MINGW64 /e/前端/vue/vue學習/vue_project/luffy (master) $ git checkout src/App.vue
12. 暫存區 -> 修改過的內容
git reset HEAD file
13. 提交的版本 -> 暫存區
git reset --soft 版本號
14. 提交的版本 -> 修改過的內容
git reset --mix 版本號
15. 提交的版本 -> 原內容 即回滾到指定版本號
git reset hard 版本號
16. 刪除一個文件並提交
rm file 本地刪除 git add/rm file 提交到暫存區 git coommit -m 'delete' 從倉庫刪除
17. 刪除一個文件 -> 撤銷刪除操做回到刪除前的狀態
rm file git checkout -- file 撤銷修改
18. 刪除一個文件並提交至暫存區 -> 撤銷刪除操做並回滾至刪除前的狀態
rm file git add/rm file 提交到暫存區 git reset HEAD file ,從暫存區回滾到工做區 gir checkout -- file ,把工做區裏操做刪除回滾
情景再現:假設公司產品已經上線,要繼續研發功能,你正在研發一個新功能,此時線上產品出bug了,須要你立刻解決一下,或者臨時新功能到來,這時你會怎麼辦?
git stash:用於將工做區發生變化的全部文件獲取臨時存儲在「某個地方」,將工做區還原當前版本未操做前的狀態;stash還能夠將臨時存儲在「某個地方」的文件再次拿回到工做區。
git stash 將新增長的功能放到一個神奇的地方,代碼回到修改以前的狀態 開始解決bug ... 解決完問題並提交代碼,產品上線 git stash pop 將新增長的功能和現有代碼合併 注:此時會出現兩種狀況 1.順利合併 2.合併衝突,須要手動解決 衝突 $ git stash pop Auto-merging README.md CONFLICT (content): Merge conflict in README.md 代碼 <<<<<<< Updated upstream ======= > bug - 新功能 >>>>>>> Stashed changes
stash相關經常使用命令:
git stash做用,幫助咱們暫時存儲已經開發一些功能的代碼,繼續作其餘事情,作完以後,再回來繼續開發
git branch dev 建立一個新的dev分支 git checkout dev 你跳轉到dev分支開發新功能 git add . git commit -m 'xxxx' 公司產品出現Bug git branch master 跳轉到master分支 git branch dev2 建立一個dev2分支解決bug git checkout dev2 找另外一我的跳轉到dev2分支解決bug ... 解決完bug git add . git commit -m '修改bug‘ 提交代碼 git checkout master 跳轉到master分支 git merge dev2 將master與dev2分支進行合併 git branch -d dev2 刪除dev2分支 這個過程當中你能夠繼續在dev分支上進行開發,開發完成以後 git add . git commit -m ’新功能完成' git branch master git merge dev master分支與dev分支進行合併,發生衝突手動解決
情景再現:本身在家裏的電腦寫完代碼要帶到公司繼續開發,u盤?有風險
前提:在github上建立一個項目,克隆遠程地址
git remote add origin https://github.com/zhangyafeii/rest_vue.git # git pull --rebase origin master 代碼合併 可能須要 git push -u origin master 代碼推送到遠程master git checkout dev 切換到dev分支 git push -u origin dev 將代碼推送到遠程dev分支
git clone https://github.com/zhangyafeii/rest_vue.git 注:默認只下載master分支 git pull origin dev 從遠程下載dev分支,直接下載到本地工做區。等於以上兩步 - git fetch origin dev 從遠程下載到本地版本庫 - git merge origin/dev 將本地版本庫與工做區合併 git rebase origin/dev 保持提交記錄的整潔 # git pull origin master # git fetch origin master # git merge origin/master
回到家: git pull origin dev 從遠程下載dev分支 修改代碼 git add . git commit -m '描述' git push origin dev 將本地代碼上傳到遠程 去到公司 git pull origin dev 修改代碼 git add . git commit -m '描述' git push origin dev
情景模擬
開發功能初期 員工A回到家 git clone https://github.com/zhangyafeii/rest_vue.git git branch A git checkout A 編寫代碼 git add . git commit -m '描述' git push origin A 這時遠程將會自動建立A這個分支 員工B回到家 git clone https://github.com/zhangyafeii/rest_vue.git git branch B git checkout B 編寫代碼 git add . git commit -m '描述' git push origin B 這時遠程將會自動建立B這個分支 功能完成合並分支 員工A git clone https://github.com/zhangyafeii/rest_vue.git git branch A git checkout A 編寫代碼 git add . git commit -m 'A功能開發完成' git push origin A # 第一個開發完成,首先合併比較輕鬆 git checkout dev git merge A git push origin dev 員工B git clone https://github.com/zhangyafeii/rest_vue.git git branch B git checkout B 編寫代碼 git add . git commit -m '描述' git push origin B # 注意: git checkout dev git merge B git push origin dev # 報錯 $ git push origin dev To https://github.com/WuPeiqi/dbhot.git ! [rejected] dev -> dev (fetch first) error: failed to push some refs to 'https://github.com/WuPeiqi/dbhot.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. # 第二個之後開發完成,得先拉下dev分支,而後在最新dev分支上合併,不然會報錯 # 正確: git pull origin dev git checkout dev git merge B git push origin dev
4. 作代碼review
- 建立review分支:
- 組長
- 帶你的人
問題: 若是你要在github上給別人代碼添加功能?
1. 不用反覆輸入用戶名密碼登陸
Https: https://用戶名:密碼@github.com/zhangyafei/rest_vue.git git remote add origin https://用戶名:密碼@github.com/zhangyafei/rest_vue.git SSH: git@github.com:WuPeiqi/dbhot.git 前提:獲取ssh的key $ ssh-keygen.exe cd /c/Users/fei/.ssh fei@home-fei MINGW64 ~/.ssh $ cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDC7Aj9QiwzWu1tOheUSEFP2XQOZ57V8mjKIKufV7qVnWx/IEg7W4/8NzDAP51drpraJcJ+eYJvltrqQzUAwdkBKmtv+VaameRseoHLvHio3BLtiw35q8LuDH4L2f0DvCXpphISF9XGkr4rEgswbPFAG8tZwEjw6sm2uOyeCyfeZHDrZKbx/Xy/4Yz6wuPjWVUj65TdsmNtvu99xjTW84pKklDUN+EIErtWyUQqljwWiwqKfEqSFyEPfLJ+OTbGxldbt14eI2nfJvvhIw42TKkpeR7JTC4EPZpHszlj54XiGpavyLBwxPtkGHKR7W9vgC7ctq0qq5nXZud8FUJ7TdD/ fei@home-fei
2. gitignore文件
建立github項目的時候選擇gitignore python
3. 版本
git tag -a v1.0 -m '版本介紹' 本地建立Tag git show v1.0 查看 git tags -n 查看本地Tag git tag -l 'v1.4.2.*' 查看本地Tag,模糊匹配 git tag -d v1.0 刪除Tag git push origin :refs/tags/v0.2 更新遠程tag git checkout v.10 切換tag git fetch origin tag V1.2 git push origin --tags git pull origin --tagsgit clone -b v1.0 https://github.com/zhangyafeii/rest_vue.git