前言
現在大部分公司代碼都用git進行進行版本控制,便於團隊協作開發。個人寫代碼的時候也可以放到GitHub上或者gitlab上面進行版本控制便於開發。最近在使用git的時候遇到了一些問題和坑因此記錄一下,以方便以後的使用。
git配置
1.下載並安裝git工具
git的安裝網址git打開網址安裝需要的類型,git官方提供了Mac,windows和linux的版本
2.GitHub上進行註冊
GitHub註冊也很簡單主要分爲一下幾步:
1.進入github官網,點擊右上角註冊按鈕。
2.填寫賬號名,郵箱和密碼
3.選擇免費的公開倉庫,點擊完成就提示註冊成功了。
4.點擊右上角的賬號設置,可以填寫一些基本信息。 這部分屬於github的社交功能了
5.我們看到頁面上有一個警告標記,是郵箱驗證。 打開郵箱找到郵件點擊即可。
3.本地配置
當我們註冊完成後,就可以使用註冊的郵箱在本地進行配置,這個配置主要是本地電腦上與github進行關聯,關聯後就可以在本地操作,然後進行與GitHub同步更新等操作,配置的過程如下:
1.設置用戶名和郵箱(–global 爲全局參數,表明本地所有Git倉庫都會使用這個配置)
git config --global user.name "yourname"
git config --global user.email "[email protected]"
2.生成密鑰(SSH key)
ssh-keygen -t rsa -C "[email protected]"
3.添加密鑰(SSH key),並驗證是否成功
添加密鑰:將上一步驟生成的密鑰即.ssh/id_rsa.pub中內容全部複製。在github的 Settings–>SSH and GPG keys–>New SSH key,key中粘貼複製的內容(Title自定義)。
驗證:github輸入ssh -T [email protected]
4.創建項目工程
1.遠程倉庫
在github中New repository 輸入Repository name。[例如:TestDemo]
2.項目工程
在自己本地電腦上新建一個與github新項目工程同名的文件夾。[例如:TestDemo]
5.創建版本庫
進入步驟四中的文件夾下,輸入以下命令初始化倉庫,若出現:Initialized empty Git repository in E:/* /*/.git/ 則表示創建成功[注意:此時會生成一個.git目錄(隱藏目錄)]
git init
6.連接遠程倉庫(下面兩種方式都可以)
git remote add origin git@github.com:yourName/repositoryname.git
git remote add origin https://github.com/yourName/repositoryname.git
7.從遠程倉庫pull文件(若遠程倉庫沒有文件,直接執行步驟8)
git pull origin master
8、將本地文件push到遠程倉庫(若沒有文件則手動創建)
git status 查看工作目錄的狀態
git add <file> 將文件添加到暫存區
git commit -m "commnet" 提交更改,添加備註信息(此時將暫存區的信息提交到本地倉庫)
git push origin master 將本地倉庫的文件push到遠程倉庫
4.git分支管理
當本地倉庫與遠程倉庫建立連接後,有時候需要新切一個分支來進行操作,避免影響到原來的分支。如果原來的倉庫叫 demo。首先使用命令:git checkout branch
看看所有的分支,也可以使用git checkout status
來看看當前分支名稱和其他信息。確定當前是在demo下面,如果不在就使用命令git checkout demo
。
1.新建分支
git checkout -b newdemo
,其中newdemo
是你新建分支名稱,可以自己去取。
2.刪除分支
git branch -d newdemo
該命令是刪除的本地分支,不會刪除遠程上的分支。刪除分支的時候記得先切換到其他分支下再來刪除你要刪除的分支,刪除分支時可能會出現 cannot delect
的異常,這時候可以使用git branch -D newdemo
來進行強制刪除,記得是大寫的D。
3.拉取遠程分支
git pull demo
4.提交分支到遠程
git push origin demo
當然提交之前先commit
一下,git commit newdemo -m "提交分支"
,提交分支的時候可能會出現提交不了的情況,記得先進行合併之後再提交。
5.項目中實用操作
有時候我們在當前分支下工作時還未完成相關工作,又要切換到其他分支工作,這時候由於本分支下的工作還未完成,並不想commit
,此時有一個特別實用的操作。
1.git stash
在切到其他分支之前,我們可以先執行,git add .
,然後再執行git stash
操作,這樣分支中修改的內容就會在本地倉庫先保存起來。當我們在其他分支上完成工作後再切回本分支時,使用 git pop
就可以恢復到切分支前的狀態開始工作了。
2.git stash list
也可以用 git stash list 來查看所有的擱置版本在出現一個擱置棧的情況下,比如如果你想找回棧中的第2個,可以用 git stash apply stash@{1}
如果想找回第1個,可以用 git stash pop
如果想刪除一個stash,git stash drop <id>
刪除所有stash,git stash clear
3.找回刪除的stash
如果有時候刪除了stash,然後又想找回來該怎麼辦,使用git fsck
可以找回所有的stash,找回後再使用stash apply stash@{n}
就可以切換到你想要的stash上了,其中n是可以自己選的,1,2,3等。具體可以看StackOverflow上面的https://stackoverflow.com/questions/89332/how-to-recover-a-dropped-stash-in-git
4.刪除遠程分支
git push origin --delete Test_Branch
6.其他問題
1.Cannot delete branch 'Test_Branch' checked out at '[directory location]'.
解決方案:切換到另一個分支,再刪除如下:
$ git checkout master
$ git branch -d Test_Branch
如果還刪除不了使用如下命令進行強制刪除:
$ git branch -D Test_Branch
2.error: Entry '<fileName>' not uptodate. Cannot merge. (Changes in working directory)
或者
error: Entry '<fileName>' would be overwritten by merge. Cannot merge. (Changes in staging area)
解決方案:git reset --hard
詳情可以參考StackOverflow上的https://stackoverflow.com/questions/1248029/git-pull-error-entry-foo-not-uptodate-cannot-merge
參考文獻
1.http://genomewiki.ucsc.edu/index.php/Resolving_merge_conflicts_in_Git
2.https://stackoverflow.com/questions/89332/how-to-recover-a-dropped-stash-in-git
3.https://backlog.com/git-tutorial/cn/stepup/stepup2_5.html