Category Archives: Git

Git note – How to checkout specific commit – Git 如何checkout 之前的Commit / Changeset

常常很大意地 merge完一些程式碼後沒有測試便CommitPull 了到 Remote Repo
所以便要用 一些 git command 來還原之前的Commit 再去解決問題

那麼如何 還原或 Checkout 之前的Commit 呢?

解決方法分簡單
我們只需要找到之前commit的 hash id 之後 “git checkout [commit hash]” 便可以了

查看之前的Commit 可以使用 “git log [-(前多小個commit)]”
e.g.

// 這個指令會輸出前三個commit的資訊
git log -3

Git Log
取後commit hash 之後 只要輸內前8個以上的characters 應該便足夠令 git 識出那個commit你想checkout
之後可以checkout 這個commit 了

git checkout 7aef7c3f

Local Repos 的 程式碼應該會還原到這個commit 時的 程式碼

hope you find it useful

Common Git Command

新公司是用Git
很多同事都是使用Git BashCommit/Pull/Push source 去Bitbucket
由於不太懂Git command的關係
所以我便用BitbucketSource Tree..
可能是太多Projects/ Repositories
久不久..我的Source Tree 便出現問題..
之前還試過

以下是一些常用的 Git Command

//用來提取這個repository 的最近資料

git fetch

// 用來checkout branch

git checkout [branch name]

// 用來Pull 最新的 current branch

git pull 

// 加 unstage 的 file

git add *

// 或一個一個檔案 stage
git add FileToStage

// commit

git commit -m "message"

//push

git push

// merge the specific branch to current

git merge develop

這會merge develop branchcurrent checkoutbranch

暫時分享住這些
有機會再share 其他常用的git command

Hope you find it useful

fetch origin error: cannot lock ref – Another git process seems to be running in this repository, e.g. an editor opened by ‘git commit’. Please make sure all processes are terminated then try again. If it still fails, a git process may have crashed in this repository earlier

今日很䌓忙時候 我的Git / Source Tree 出現了以下的錯誤信息
可能是開了太多的ProjectLocal Branch 的關係

Another git process seems to be running in this repository

git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin
error: cannot lock ref ‘refs/remotes/origin/develop’: Unable to create ‘D:/Git/client-web/.git/refs/remotes/origin/develop.lock’: File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by ‘git commit’. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.”

解決方法十分簡單
我們只需要到這個Project 的 “.Git” 資料夾內
e.g.”/.git/refs/remotes/origin/

或出那個有 “.lock” Extension 的檔案.之後把他”刪除” 便可以了

Hope you find it useful

How to prevent git to commit a file, .gitignore not working

之前的網誌介紹了我把學習 NodeJs的程式碼 Open source了到 GitHub
https://github.com/sharechiwai/NodeExpress
現在發現有小小的難題..
就是很多的Web Application 都有使用第三方的API
如果直接把那些 API KeyCommitGitHub上那便會所有人都能我申請的 API Key
不太安全吧..
所以我便做了很多research看看怎樣解決這個問題.
很多網友都說只要修改 .gitignore 加上那個不想commit的檔案路俓便可以了
.gitignore config
但是試了很久也不成功 在GitHub Application上還是可以看到 那個config.js
config.js still showing on github to be commit

最後終於找到了為什麼 .gitignore not working 和解決方法

加了檔案路徑到.gitignore 都不能解決
是因為.gitignore 只能處理untrack的檔案..
即是如果你的檔案之前 commit過.當那個檔案有任何改變是Git都會說有檔案可以commit

解決方法..
我們需要使用 command prompt 在這個Git的 repository 上輸入以下的指令
git update-index –assume-unchanged [File path / 檔案路徑/ 如果只有指定檔案, 可以加檔案名/ 否則便會整個資料夾都不會 commit]

e.g.

git update-index --assume-unchanged config/config.js

Git command to make git treat the specific file/folder unchanged
得左
config.js not showing on git application

有時候大家想Git再次commit這個檔案..可以在command prompt上使用這個指令
git update-index –no-assume-unchanged [File path / 檔案路徑/ 如果只有指定檔案, 可以加檔案名/ 否則便會整個資料夾都不會 commit]

E.G.

git update-index --no-assume-unchanged config/config.js

Git command to ensure the file/folder are tracked
Hope you find it useful

BitBucket SoureTree – The server’s host key is not cached in the registry

今天嘗試使用SourceTreePush一個新的Git Repos
誰不知 Push了很久都是停留在同一個output Windows
SourceTree Output Windows - The server's host key is not cached in the registry

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master
Pushing to git@bitbucket.org:sharechiwai/SampleCode.git

The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 97:xxxxxxxxxxxxxxxxxxxxxxx
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.

If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.

做了一會research之後終於找到解決方法了

解決方法:
大家可以使用Command Prompt之後輸入以下指令到 Source treePutty資料夾

cd "C:\Program Files (x86)\Atlassian\SourceTree\tools\putty"

之後執行以下指令到連接到 BitBucket

plink git@bitbucket.org

他便會出現上面的問題..叫你把Host Key CachRegistry
BitBucket SourceTree - The server's host key is not cached in the registry Solutions
完成後再嘗試使用Source Tree 去Push
這一次很快便可以把這一個Local Repos Push上了BitBucket

Hope you find it useful

Git 的簡單指令 I – Clone

今天才明白到怎樣使用 GitClone 指令
所以便寫這個筆記提示自己了

原來 Git Clone的指令是這樣的

git clone git repository的網址 資料來名稱.. 如果沒有的話會自動建立一個新的

E.G.
“git clone https://github.com/jquery/jquery.git jquery
上面的指令會把在GitHub上的Jquery Repository 複製一個到 現在的資料來中的jquery資料夾內..
如果沒有jquery這個資料夾..他會自動建立jquery 這個資料夾

Hope you find it useful