git作为目前最流行的版本控制工具,使用起来比svn 要复杂一点,国外一个开发者写一个游戏githug 来帮助大家熟悉 git 的使用,下面我们开玩吧
一. 安装
githug 是使用ruby写的,直接贴 github 地址
https://github.com/Gazler/githug
查看 readme 安装
二. 使用
1. git init

cd git_hug
git init
git init 初始化一个本地仓库,初始化完成后,可以看到有一个.git 的文件夹 。
类似于.svn 的作用。版本记录就靠它了。
也可以通过 git init my_res 直接建立文件夹 并初始化。
另外还可以通过git clone 远程仓库来创建本地仓库。
2. git config

git config --global user.name "you name"
git config --global user.email "your email"
git config 有很多命令,常用的就是设置 name 和email。
git config --list 可以看到仓库的配置。
git config 变量 ,查看git 单个配置,如查看作者name git config name。
--global 代表该仓库下都使用这个配置。
3. git add

git add
git add 类似于svn add ,添加文件到版本库,可以使用**git add . **或者 **git add * ** 添加所有未加入版本的文件。
4. git commit

git commit README -m "add readme"
git commit 提交版本,可以输入git commit直接提交,然后再写入版本描述,
也可**git commit -a -m "version desc" **提交。
5. git clone

git clone https://github.com/Gazler/cloneme
6. git clone to folder <a name="clone"></a>

git clone https://github.com/Gazler/cloneme my_cloned_repo
git clone 复制一个远程仓库到本地
7. gitignore

vim .gitignore
添加 *.swp
保存
8. gitignore

vim .gitignore
添加
*.a
!lib.a
保存
通过修改.gitignore可以将一些文件加入忽略列表,比如
# 以'#' 开始的行,被视为注释.
# 忽略掉所有文件名是 foo.txt 的文件.
test.txt
# 忽略所有生成的 log 文件,
*.log
# main.log是手工维护的,所以例外.
!main.log
# 忽略所有.a 和 .b文件.
*.[ab]
# 忽略file 文件夹
file/
我们有时候不小心提交了不想提交的文件,但又没有加入忽略列表,那么只能使用reset 然后再加入忽略列表了
9. git status

git status
查看 untracked files
database.yml
10. git status

git status
查看 Changes to be committed
共2个
git status 是 git 里面最常用的命令。
Changes to be committed 一般是git add 过的文件。
Changes not staged for commit 版本中已经有文件,但是修改过。
Untracked files 还有添加到版本的文件。
git status -s 可以查看简单的列表
11. git rm

git rm deleteme.rb
12. git rm --cached

git rm deleteme.rb --cache
这里是从版本中删除一个文件,但是还是要保留这个文件,git rm 加上--cache就可以了。
另外通过git status 看出 deleteme.rb 是刚刚add过的,我们还可以使用
git reset HEAD -- deleteme.rb
以上是git 比较简单又常用的命令,下面我们开始看看git 神奇的地方
有时我们要切换到一个分支修复bug,但是目前分支的代码写了一半,这时候git的 储藏功能就很好用了
13. git stash

git stash
输入git stash即可储藏当前工作,如果要恢复的话 git stash apply 。
通过 ** git stash list ** 查看储藏列表。
$ git stash list
$:git_hug forfire$ git stash list
stash@{0}: WIP on master: 0206059 Add some lyrics
stash@{1}: WIP on master: 0206059 Add some lyrics
如果要恢复 stash@{1} git stash appley stash@{1}
13. git mv

git mv oldfile.txt newfile.txt
git mv 其实就是 git rm --cache 的变种
git rm oldfile.txt --cache
mv oldfile.txt newfile.txt
git add newfile.txt
14. git mv

mdkir src
git mv *.html src/
15. git log

commit 04ed6dac619d8c8bd51fcd724aa47577d0fc23a2
Author: forfire <forfire@foxmail.com>
Date: Wed Feb 24 15:02:27 2016 +0800
add log fmt
commit e76a109bd91b7508ad292ad99cc08969fd631496
Author: forfire <forfire>
Date: Wed Feb 24 14:26:27 2016 +0800
edit login msg echo
commit b4d97e9ff8b2496f9953b22c746878c5e0b5f5ea
Author: zl <zl>
Date: Wed Feb 24 14:21:02 2016 +0800
zl
commit 568ab1935373cfd278f71bc9db8ee72e2bb7af36
Author: forfire <forfire>
Date: Wed Feb 24 14:20:21 2016 +0800
open heart
commit 3192416cd2df55a89cb879f94ec86d9000791146
Author: forfire <forfire>
Date: Wed Feb 24 14:02:19 2016 +0800
edit heart
我们可以用--oneline 显示简洁版本
04ed6da add log fmt
e76a109 edit login msg echo
568ab19 open heart
3192416 edit heart
如果我们要查看分支合并的情况可以使用 --online --graph

git log file 查看某个文件改动日志
git log --since=date --after=date 查看日期段修改
16. git tag

git tag -a new_tag
git tag 是到一定版本后,永久保存某个版本,如果51896a忘了打tag,也可以通过 git tag -a v1.0 51896a 添加tag
17. git tag

git push origin tag_to_be_pushed
git tag 可查看tag 列表 -l "v1." 可列出v1. 的tag。
git show tagName 查看某个tag 详情。
上面说得时添加tag,push tag, 那么删除了
git tag -d tagName //删除
git push origin :refs/tags/tagName //删除远程tag
18. git commit amend

git commit --amend 是重新提交,题中是提交后发现有个文件没有加进来
git add forgotten_file.rb
git commit --amend
提交后,发现 git add 已经和上次提交合并一起了
19. git commit in future

这一题一开始没理解题目的意思,其实就是提交,提交后把提交时间改成未来的时间
git commit -m "add readme"
git commit --amend --date="2016-02-27"
20. git reset

这题有2个已经add 过的文件,要撤销其中一个文件
git reset HEAD -- to_commit_second.rb
21. git reset --soft

这一步是要把上次的提交撤销,但是 文件不能修改
git reset --soft HEAD~1
git reset -soft :取消了commit
git reset -mixed :取消了commit ,取消了add
git reset -hard :取消了commit ,取消了add,取消源文件修改
22. git checkout

git checkout -- config.rb
or
git reset --hard 39eb5d8186145fc9a25f57e99dd48bfbdf909403
要将文件恢复到上次提交的状态, git checkout 和 git reset --hard 都可