[TOC] ## Git相关知识 [参考资料](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) ### 下载安装 1.RHEL/CentOS系统 ``` sudo yum install git ``` 2.Debian/Ubuntu 系统 ``` sudo apt-get install git ``` 3.Mac OS X 系统: ``` xcode安装 ``` 4.Windows安装 > [国外地址](https://git-for-windows.github.io) > > [国内镜像](https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit) ### 申明自己的信息 ``` git config --global user.name "bsbforever" git config --global user.email "bsbforever520@hotmail.com" git config --global color.ui true ``` ### 创建版本库(repository) 1.创建空的目录 ``` $ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit ``` 2.初始化版本库 ``` $ git init Initialized empty Git repository in /Users/michael/learngit/.git/ ``` ### 将文件放至版本库 不要使用windows 记事本打开文件修改 1.把文件放至库目录(子目录) ``` git add readme.txt ``` 2.commit操作 ``` git commit -m "wrote a readme file" ``` 3.可一次性add多个文件 ``` $ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files." ``` ### 提交修改文件 1.首先修改其中的文件 2.查看修改状态 ``` $ 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: readme.txt # no changes added to commit (use "git add" and/or "git commit -a") ``` 3.查看差异部分 ``` $ git diff readme.txt diff --git a/readme.txt b/readme.txt index 46d49bf..9247db6 100644 --- a/readme.txt +++ b/readme.txt @@ -1,2 +1,2 @@ -Git is a version control system. +Git is a distributed version control system. Git is free software. ``` 4.提交更改 ``` git add readme.txt ``` ``` $ git status ``` ``` $ git commit -m "add distributed" [master ea34578] add distributed 1 file changed, 1 insertion(+), 1 deletion(-) ``` ``` $ git status # On branch master nothing to commit (working directory clean) ``` ### 查看更改log 详细版本: ``` $ git log commit 3628164fb26d48395383f8f31179f24e0882e1e0 Author: Michael Liao <askxuefeng@gmail.com> Date: Tue Aug 20 15:11:49 2013 +0800 append GPL commit ea34578d5496d7dd233c827ed32a8cd576c5ee85 Author: Michael Liao <askxuefeng@gmail.com> Date: Tue Aug 20 14:53:12 2013 +0800 add distributed commit cb926e7ea50ad11b8f9e909c05226233bf755030 Author: Michael Liao <askxuefeng@gmail.com> Date: Mon Aug 19 17:51:55 2013 +0800 wrote a readme file ``` 或者简洁版本 ``` $ git log --pretty=oneline 3628164fb26d48395383f8f31179f24e0882e1e0 append GPL ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file ``` ### 回退文件版本 Git采用HEAD^ HEAD^^...HEAD~100表示 上一个版本 上上个 等等 1.恢复至上个版本 ``` $ git reset --hard HEAD^ HEAD is now at ea34578 add distributed ``` 2.回滚回退前版本 ``` git reset --hard c94f51e0eab388ce24a930efa56263c26e6637fe ``` 3.查看回退记录 ``` $ git reflog ea34578 HEAD@{0}: reset: moving to HEAD^ 3628164 HEAD@{1}: commit: append GPL ea34578 HEAD@{2}: commit: add distributed cb926e7 HEAD@{3}: commit (initial): wrote a readme file ``` ### 删除版本库文件 ``` git rm test.txt ``` ## 远程仓库 ### 账号配置 1.新建ssh key ``` ssh-keygen -t rsa -C "youremail@example.com" ``` 2.添加公钥至GitHub账号 ### 添加远程库 1.GitHub新建远程库 2.初始化git ``` git add . ``` 3.关联本地库和GitHub库 ``` $ git remote add origin git@github.com:michaelliao/learngit.git ``` 4.推送至远程库 ``` $ git push -u origin master Counting objects: 19, done. Delta compression using up to 4 threads. Compressing objects: 100% (19/19), done. Writing objects: 100% (19/19), 13.73 KiB, done. Total 23 (delta 6), reused 0 (delta 0) To git@github.com:michaelliao/learngit.git * [new branch] master -> master Branch master set up to track remote branch master from origin. ``` 5.同步至本地至远程库 ``` $ git push origin master ``` ### 从远程库克隆 1.新建远程库 2.克隆远程库(本地目录) ``` $ git clone git@github.com:michaelliao/gitskills.git Cloning into 'gitskills'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. $ cd gitskills $ ls README.md ``` ## 分支管理 1.创建和切换分支 ``` $ git checkout master ``` 2.查看当前分支 ``` $ git branch ``` 3.合并分支 ``` git merge dev ``` 4.给当前commit上打标签 ``` git tag v1.0 ``` 5.按commit号大标签 ``` git tag v0.9 6224937 git tag -a v0.1 -m "version 0.1 released" 3628164 ``` 6.删除标签 ``` $ git tag -d v0.1 Deleted tag 'v0.1' (was e078af9) ``` 7.推送标签至远程库 ``` $ git push origin v1.0 Total 0 (delta 0), reused 0 (delta 0) To git@github.com:michaelliao/learngit.git * [new tag] v1.0 -> v1.0 ``` ## Git常用配置 配置文件目录 ``` .git/config ``` ### 配置忽略文件 记得这个文件也要提交 ``` vim .gitignore # Windows: Thumbs.db ehthumbs.db Desktop.ini # Python: *.py[cod] *.so *.egg *.egg-info dist build # My configurations: db.ini deploy_key_rsa ``` 1.强制提交 ``` $ git add -f App.class ``` 2.检查ignore文件 ``` git check-ignore ``` ### 配置别名 ``` git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" ```