在本地使用 git 版本控制
init 初始化
- 在要使用版本控制的檔案夾裡輸入 init 初始化,以 ls -la 可看到隱藏的 .git 檔案夾
- 使用 git status 觀察版本狀態
git add 加入版本控制檔案
- 使用 git add [fileName] 加入要版本控制的檔案,或是使用 git add . 表示全部加入
- 使用 git status 會發現有兩區域: staged (加入)/ untracked (沒加入)版本控制,可使用 git rm —cached [fileName] 將已加入的檔案移出至 untracked。
- 要 add 才能 commit
git commit 新建一個版本
- 使用 git commit 新建一個版本,或出 vim 文字編輯器 ( i insert / :q 退出),會出現 commit 是空的(empty)訊息。
- 以 git commit -m “[訊息]”
git commit 如出現錯誤,跳出設定帳號跟姓名的畫面,請輸入以下指令
- git config –global user.name “your name”
- git config –global user.email “youremail”
git log 歷史紀錄
- 使用 git log 會出現所有 commit 的歷史紀錄編號,q 離開 log
git checkout 回到過去某個版本狀態
- 使用 git log —online 會出現 commit 短版本列表,前 7 碼為版本簡碼,後面是 commit 時輸入的訊息。
- 使用 git checkout [版本碼] 即可回到要去的版本時間點,用 git log 觀察這個版本時間點之後的版本都會看不見。
- 使用 git checkout master 回去現在的時間點版本,再用 git log 觀察就可看到所有版本。
.gitignore 忽略檔案
在檔案夾裡增加一個 .gitignore 檔案,裡面寫上不要加入版本控制裡的檔案,這樣 git 就不會每次提醒,例如連線資料、test、log 等系統自動產生的檔案。
- touch .gitignore 產生檔案
- vim .gitignore 編輯檔案
- Git commit -am “commit message” 可直接 add+commit 但只會加入曾經加入的,而不會加入新的檔案。所以每次有新檔案時最好使用 git add [fileName] 加入,或用 git add . 全部加入再 commit。
小筆記
git checkout -b [分支名] 可直接開分支並切換過去
git -d [分支名] 把分支刪除
git diff 可看上一次做的變動,q 退出
在本地端開分支 branch –> 合併主版本 merge
設分支 branch
- 用 git branch -v 看有哪些 branch 主分支為 master,也會顯示這支分支最後一個 commit
- 原本在 master,創另一個分支 :git branch [分支名]
- 切換到那個分支:git checkout [分支名]
- 刪除分支:git branch -d [分支名]
- 切換分支 :git checkout [分支名]
- 用 git branch -v 查看現在在哪個分支(顯示綠色)
merge branch to master 將分支合併到主支幹
- git [分支] merge : 把某一分支合併過來 master
- git branch -d [分支] : 合併後即可把原本的分支刪除
合併時發生衝突 conflict
- 主支和分支同時修改時,分支要合併至主支時,會產生 auto-merging [fileName]CONFLICT (content) : Merge conflict in [fileName]automatic merge failed; fix conflicts and then commit the result.
- 用 git status 查看會以 both modified : [fileName] 顯示有問題的檔案
- 進入有問題的 [fileName] 手動修改,=====為兩版本分隔,<<<<< [分支名]。將其中一個刪除與更正存檔,再 commit 一次,再合併。
- git status 顯示 resolve conflicts 表示衝突解決。
注意 + 小觀念
Git : 版本控制的程式
GitHub : 放 git repository 的存儲庫
有用 git 不一定要用 GitHub,但用 GitHub 就一定要會用到 git
忘記切回 test 分支,所以後來無法順利 merge 到 master 分支,雖然後來看似解決,但還真不知道自己是怎麼解決的,就是試了幾個間,跟著打就好了...這樣其實有點可怕,下次再注意!
把本地端 code 放上 GitHub
Create a new repository 在 github 開一個新的存儲庫
- 填入 Repository name 和 Description,就好有使用技術關鍵字
- 選擇 Public 或 Private
- Initialize this repository whit a README 可以先不選
- Add .gitignore 和 a license 都選預設 None
方法ㄧ) 在本地端還沒有 code 可使用這種方法
…or create a new repository on the command line
echo “# github.io-“ >> README.md
git init
git add README.md
git commit -m “first commit”
git remote add origin [https://github.com/tsuifei/倉庫位址.git]
git push -u origin master
方法二) 在本地端已經有 code 用這種把 code push 到 github 的方法。
…or push an existing repository from the command line
從本地 push 到遠端
git remote add origin [https://github.com/tsuifei/倉庫位址.git]
git push -u origin master 把 code push 到 github 的這個 master 主支上 通常這之後會要你的 github 的帳號和密碼,有輸入才算與遠端相通 單字 : remote 遠端 / origin 代號
-u -> set-upstream
方法三) 以引入的方式將 code 放進來
…or import code from another repository
You can initialize this repository with code from a Subversion, Mercurial, or TFS project.
把本地端最新的版本推上 GitHub
git push
- 本地端 : 把檔案 commit 之後, 使用 git push origin master 推到主支上
- Github 端 : 重新整理頁面後 branch 會更新,commits 數量也會增加
- 如果只有 commit 沒 push,Github 端不會變動
- 可開分支 再 git push origin [分支名] ,再到 Github 端看就有兩個 branch
把 Github 端上最新版本 拉下本地端
git pull
- 先到要拉下來的位置
- 執行 git pull origin master
- 如有 conflict 可依上述 merge 的衝突解決方式處理。
把其他人 Github 端上的 code 拉下本地端
git clone (42 就是用這種方法)
- 先到要拉下來的位置
- 執行 git colne [https://github.com/tsuifei/倉庫位址.git] 可自行取名
- git clone 之後可以 commit 因為在本地端,且專案是別人的,所以如果執行 push 會因無權限而無法執行
將別人的專案變成自己的
- 使用 Fork 功能,再使用 clone 方式將專案拉下至本地端
其他
直接在 Github 端 commit 修改檔案
- 選要修改的檔案,按 icon 筆(Edit this file)
- 直接在檔案下方下 commit 選擇要 commit 的支,通常選(commit directly to the master branch)
Git 問題處理集合
Git 提示 fatal: remote origin already exists 錯誤解決辦法
使用 git 上傳至遠程 github 倉庫的時候出現提示錯誤:fatal: remote origin already exists.
1、先刪除遠端 Git 倉庫
$ git remote rm origin
2、再增加遠端 Git 倉庫
$ git remote add origin [git@github.com:遠端位址]
如果執行 git remote rm origin 有出現錯誤訊息的話,可以手動修改 gitconfig 文件的內容
$ vi .git / config
把[remote “origin”] 那一行刪掉就可以了。