打$ which git
會在/usr/bin/git
看一下版本
$ git --version
版本應該也不是最新的,那當然想要把它更新到最新
那我似乎只是去git官網下載最新的git .dmg檔案來安裝
並且重啟iterm2
這時再看一下它的位置:
$ which git
已經在/usr/local/bin/git
再看一下版本確認一下:
$ git --version
git version 2.13.1
恩...很神奇的幫你更新了,一開始我以為還要更改路徑之類的,但重啟iterm2就自動幫我做好了
設定一些初始資料:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
可利用cat來查看gitconfig,裡面存著剛剛設定的資料:
$ cat ~/.gitconfig
確認剛剛的設定:
$ git config --list
會列出所有的設定資訊
讓git輸出有顏色:
$ git config --global color.ui true
開始操作git做版控
首先要切換到要做版控的專案資料夾,在下init指令前先下:
$ git status
fatal: Not a git repository (or any of the parent directories): .git
來查看一下目前的狀態
現在要建立一個Repository
$ git init
Initialized empty Git repository in /Users/xanxus/Downloads/我的專案/.git/
一定要切換到專案資料夾才init,直接init會整個電腦都版控!!!
再看一下狀態:
$ git status
On branch master表示目前處於名為master的分支上
將檔案加入追蹤:
$git add code1.java
或用
$ git add . 會將所有檔案加入追蹤
再$ git status看一下狀態:
取消追蹤檔案:
如果不小心把不需要版控的檔案add
add之後,回應的訊息是綠色的,說你可以準備commit:
但如果add錯了,這時我們要把它取消:
$ git rm --cached NewServlet.java
rm 'NewServlet.java'
進行版本提交:
$ git commit
$ git commit -m "提交訊息"
第一個會開啟編輯器,讓你輸入提交訊息,內容可以輸入蠻多的
第二個直接打提交訊息可直接提交
這裡使用第一個:
$ git commit
[master (root-commit) 7a3e22a] 第一次提交檔案
1 file changed, 160 insertions(+)
create mode 100644 code1.java
看一下現在狀態:
$ git status
On branch master
nothing to commit, working tree clean
表示目前沒有未被追蹤或修改過的檔案
查看提交紀錄:
$ git log
commit 7a3e22aeac732a7986ed1aff2d4d09047123ed25 (HEAD -> master)
Author: 你的名字 <你的Mail>
Date: Mon Jun 19 05:22:20 2017 +0800
第一次提交檔案
7a3e22aeac732a7986ed1aff2d4d09047123ed25 是提交版本的ID
如提交次數過多可用:
$ git log -"數字"
限制顯示log數量
流程整理:
做個小測試,我現在對code1.java的內容隨便打幾個字,在看一下status
$git status
表示我修改了這個檔案
我很無聊又把修改的內容刪掉再status一次,就會變回沒修改的狀態:
On branch master
nothing to commit, working tree clean
很顯然地已經對他做版控了
又重複2~5的步驟,並再看一次log:
要離開這個畫面按q就可以了!
--amend指令:修改上一次commit提交的訊息
在這之前記得到你有被版控的資料夾
$ git commit --amend
checkout指令:復原被更動的檔案(回到你最後一次commit的版本)
使用情境:
如果今天程式碼改壞了,就可以回到上次的版本
$ git checkout code1.java
可以把程式碼先開起來,隨便改改,我把程式碼整個刪掉,下指令後它都可以復原!非常厲害。
$ git checkout -f
把所有檔案回復到上次commit
$ git checkout 7a3e22aeac732a7986ed1aff2d4d09047123ed25
回復到7a3e22aeac732a7986ed1aff2d4d09047123ed25這ID的code
reset指令:回到某ID對應的commit狀態(跟checkout不同)
與checkout功能不一樣!checkout是回到上一次的code,但reset是回到某commit的狀態,也就是從最新的節點,移動的指定的節點。
在這之前先用$ git log 來看你要回到哪個ID
先來試試$ git reset 7a3e22aeac732a7986ed1aff2d4d09047123ed25 --hard
7a3e22aeac732a7986ed1aff2d4d09047123ed25就是這檔案某次commit的ID,後面--hard表示不保留其他commit的紀錄.......
再$ git log看一下
會發現只剩下剛剛回到那個ID的commit紀錄,所以只有一筆log
$ git reset 16522ce7b5daf6f76203a91f27f9fb689a4d9089 --soft
後面的--soft指會保留其他commit狀態,並移動到這個ID的commit狀態
$ git reset --hard a40b64af845b1baa408ee578562ef3a31e62905c
可回覆到某個版本的內容,但其他commit紀錄都會被移除
Github SSH key設定
先進到帳號設定SSH這裡
第一步:產生SSH Key
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
設定一些初始資料:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
可利用cat來查看gitconfig,裡面存著剛剛設定的資料:
$ cat ~/.gitconfig
確認剛剛的設定:
$ git config --list
會列出所有的設定資訊
讓git輸出有顏色:
$ git config --global color.ui true
開始操作git做版控
首先要切換到要做版控的專案資料夾,在下init指令前先下:
$ git status
fatal: Not a git repository (or any of the parent directories): .git
來查看一下目前的狀態
現在要建立一個Repository
$ git init
Initialized empty Git repository in /Users/xanxus/Downloads/我的專案/.git/
一定要切換到專案資料夾才init,直接init會整個電腦都版控!!!
再看一下狀態:
$ git status
On branch master Initial commit Untracked files: (use "git add會發現已經起了變化。..." to include in what will be committed) code1.java nothing added to commit but untracked files present (use "git add" to track)
On branch master表示目前處於名為master的分支上
將檔案加入追蹤:
$git add code1.java
或用
$ git add . 會將所有檔案加入追蹤
再$ git status看一下狀態:
On branch master Initial commit Changes to be committed: (use "git rm --cached可看到new file: code1.java 表示準備被提交(commit)..." to unstage) new file: code1.java
取消追蹤檔案:
如果不小心把不需要版控的檔案add
add之後,回應的訊息是綠色的,說你可以準備commit:
但如果add錯了,這時我們要把它取消:
$ git rm --cached NewServlet.java
rm 'NewServlet.java'
可以看到變紅色了,表示變回未add的狀態
進行版本提交:
$ git commit
$ git commit -m "提交訊息"
第一個會開啟編輯器,讓你輸入提交訊息,內容可以輸入蠻多的
第二個直接打提交訊息可直接提交
這裡使用第一個:
$ git commit
[master (root-commit) 7a3e22a] 第一次提交檔案
1 file changed, 160 insertions(+)
create mode 100644 code1.java
看一下現在狀態:
$ git status
On branch master
nothing to commit, working tree clean
表示目前沒有未被追蹤或修改過的檔案
查看提交紀錄:
$ git log
commit 7a3e22aeac732a7986ed1aff2d4d09047123ed25 (HEAD -> master)
Author: 你的名字 <你的Mail>
Date: Mon Jun 19 05:22:20 2017 +0800
第一次提交檔案
7a3e22aeac732a7986ed1aff2d4d09047123ed25 是提交版本的ID
如提交次數過多可用:
$ git log -"數字"
限制顯示log數量
流程整理:
- 初始化儲存庫
- 對檔案做新增修改
- git add:選擇欲加入本次版本的變更檔案
- git commut:將本次版本進行提交
- 回到第2步
做個小測試,我現在對code1.java的內容隨便打幾個字,在看一下status
$git status
On branch master Changes not staged for commit: (use "git add會發現這行modified: code1.java..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: code1.java no changes added to commit (use "git add" and/or "git commit -a")
表示我修改了這個檔案
我很無聊又把修改的內容刪掉再status一次,就會變回沒修改的狀態:
On branch master
nothing to commit, working tree clean
很顯然地已經對他做版控了
又重複2~5的步驟,並再看一次log:
commit d3952901e08d53a93b693c041ead01d850276456 (HEAD -> master) Author: 你的名字 <你的Mail> Date: Mon Jun 19 05:42:00 2017 +0800 第二次提交 commit 7a3e22aeac732a7986ed1aff2d4d09047123ed25 Author: 你的名字 <你的Mail> Date: Mon Jun 19 05:22:20 2017 +0800 第一次提交檔案 (END)原來這就是git的感覺啊
要離開這個畫面按q就可以了!
--amend指令:修改上一次commit提交的訊息
在這之前記得到你有被版控的資料夾
$ git commit --amend
就會開啟這個畫面讓你修改提交訊息
[master 630413e] 第二次提交(修改版Ver2) Date: Mon Jun 19 05:42:00 2017 +0800 1 file changed, 1 insertion(+), 1 deletion(-)回來後會出現這樣的訊息,會看到你修改的訊息
checkout指令:復原被更動的檔案(回到你最後一次commit的版本)
使用情境:
如果今天程式碼改壞了,就可以回到上次的版本
$ git checkout code1.java
可以把程式碼先開起來,隨便改改,我把程式碼整個刪掉,下指令後它都可以復原!非常厲害。
$ git checkout -f
把所有檔案回復到上次commit
$ git checkout 7a3e22aeac732a7986ed1aff2d4d09047123ed25
回復到7a3e22aeac732a7986ed1aff2d4d09047123ed25這ID的code
reset指令:回到某ID對應的commit狀態(跟checkout不同)
與checkout功能不一樣!checkout是回到上一次的code,但reset是回到某commit的狀態,也就是從最新的節點,移動的指定的節點。
在這之前先用$ git log 來看你要回到哪個ID
先來試試$ git reset 7a3e22aeac732a7986ed1aff2d4d09047123ed25 --hard
7a3e22aeac732a7986ed1aff2d4d09047123ed25就是這檔案某次commit的ID,後面--hard表示不保留其他commit的紀錄.......
再$ git log看一下
會發現只剩下剛剛回到那個ID的commit紀錄,所以只有一筆log
$ git reset 16522ce7b5daf6f76203a91f27f9fb689a4d9089 --soft
後面的--soft指會保留其他commit狀態,並移動到這個ID的commit狀態
$ git reset --hard a40b64af845b1baa408ee578562ef3a31e62905c
可回覆到某個版本的內容,但其他commit紀錄都會被移除
Github SSH key設定
先進到帳號設定SSH這裡
第一步:產生SSH Key
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
最後面換成你的Email,例如:
$ ssh-keygen -t rsa -b 4096 -C asd12345@example.com
之後會出現一些訊息就按Enter就好....
第二步:確認是否產生成功Key
輸入:
$ ls -al ~/.ssh
$ ssh-keygen -t rsa -b 4096 -C asd12345@example.com
之後會出現一些訊息就按Enter就好....
第二步:確認是否產生成功Key
輸入:
$ ls -al ~/.ssh
成功的話會有id_rsa和id_rsa.pub兩個東西
Agent pid 59566
在~/.ssh/config新增內容為下的片段(config沒有就自己建)
最後再下:
$ ssh-add -K ~/.ssh/id_rsa
Host * AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_rsa
最後再下:
$ ssh-add -K ~/.ssh/id_rsa
Identity added: /Users/xanxus/.ssh/id_rsa (/Users/xanxus/.ssh/id_rsa)
第四步:加入SSH Key至Github
用以下指令把SSH複製起來:
$ pbcopy < ~/.ssh/id_rsa.pub選New SSH key
輸入Title
內容就把剛複製的SSH貼上
點Add SSH key
完成!
第五步:測試SSH與Github是否連接成功
$ ssh -T git@github.comThe authenticity of host 'github.com (192.30.253.112)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
這是正常的,成功的話會看到一組IP
那當然要答yes
Please type 'yes' or 'no': yes
Warning: Permanently added 'github.com,192.30.253.112' (RSA) to the list of known hosts.
Hi 你的名字! You've successfully authenticated, but GitHub does not provide shell access.
看來是沒問題
把本地儲存庫的檔案上傳到Github
第一步:先在github創新的儲存庫,不要勾readme檔案
第二步:把本地儲存庫先init並把要上傳的檔案做版控
$ git init
$ git add code1.html
$ git commit -m "初始化"
上傳至github
$ git remote add origin git@github.com:YourName/Homework.git
$ git push -u origin master
這樣就上傳上去了
Note:
不能傳github的解決方案:
發生原因:貌似我用--amend改commit紀錄後,就不能直接push
以下跳出的訊息
➜ ParseKeelungShopJson (master) ✔ git push -u origin master
To github.com:你的名字/ParseRouteInstruction.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:你的名字/ParseRouteInstruction.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
原因是github上面的版本比較新,因為--amend後,本地的版本是回到之前的版本
這時要先pull
➜ ParseKeelungShopJson (master) ✔ git pull origin master
From github.com:你的名字/ParseRouteInstruction
* branch master -> FETCH_HEAD
Merge made by the 'recursive' strategy.
這時會跳出一個畫面,貌似要你寫merge的訊息
參考資料:
用以下指令把SSH複製起來:
$ pbcopy < ~/.ssh/id_rsa.pub選New SSH key
輸入Title
內容就把剛複製的SSH貼上
點Add SSH key
完成!
第五步:測試SSH與Github是否連接成功
$ ssh -T git@github.comThe authenticity of host 'github.com (192.30.253.112)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
這是正常的,成功的話會看到一組IP
那當然要答yes
Please type 'yes' or 'no': yes
Warning: Permanently added 'github.com,192.30.253.112' (RSA) to the list of known hosts.
Hi 你的名字! You've successfully authenticated, but GitHub does not provide shell access.
看來是沒問題
把本地儲存庫的檔案上傳到Github
第一步:先在github創新的儲存庫,不要勾readme檔案
第二步:把本地儲存庫先init並把要上傳的檔案做版控
$ git init
$ git add code1.html
$ git commit -m "初始化"
上傳至github
$ git remote add origin git@github.com:YourName/Homework.git
$ git push -u origin master
這樣就上傳上去了
Note:
- Github儲存庫中,左上方的commits次數就是每個檔案commit的總次數,如我檔案1 commit五次,檔案2 commit四次,那左上方commits次數就是九次。
- 點進左上方commits中,可看到每次commit的紀錄:
再點進某次commit,例如我點"第三次修改":可看到這次commit中我程式碼修改的部分。3. 修改了兩個檔案,一次add兩個檔案,也一次commit兩個檔案,是可以的,Github中會長這樣:
…or create a new repository on the command line
echo "# ParseRouteInstruction" >> README.md git init git add README.md git commit -m "first commit" git remote add origin git@github.com:你的名字/ParseRouteInstruction.git
git push -u origin master
…or push an existing repository from the command line
git remote add origin git@github.com:你的名字/ParseRouteInstruction.gitgit push -u origin master
不能傳github的解決方案:
發生原因:貌似我用--amend改commit紀錄後,就不能直接push
以下跳出的訊息
➜ ParseKeelungShopJson (master) ✔ git push -u origin master
To github.com:你的名字/ParseRouteInstruction.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:你的名字/ParseRouteInstruction.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
原因是github上面的版本比較新,因為--amend後,本地的版本是回到之前的版本
這時要先pull
➜ ParseKeelungShopJson (master) ✔ git pull origin master
From github.com:你的名字/ParseRouteInstruction
* branch master -> FETCH_HEAD
Merge made by the 'recursive' strategy.
這時會跳出一個畫面,貌似要你寫merge的訊息
出去後就可以push了
➜ ParseKeelungShopJson (master) ✔ git push -u origin master
Counting objects: 2, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 480 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To github.com:你的名字/ParseRouteInstruction.git
6230920..d66350a master -> master
Branch master set up to track remote branch master from origin.
參考資料:
- Install and Update to latest version Git on Mac OSX 10.11 El Capitan
- https://dotblogs.com.tw/wasichris/2016/04/29/225157
- https://dotblogs.com.tw/wasichris/2016/05/07/231839
- SSH keyhttps://nyllep.wordpress.com/2012/01/21/sshkey-for-bitbucket/
- https://stackoverflow.com/questions/37937984/git-refusing-to-merge-unrelated-histories
- 不能push的解決方案 https://noootown.wordpress.com/2015/06/19/git-first-use/
沒有留言:
張貼留言