Git Basic
git init
.git
git add .
git add readme.txt
git commit -m 'added readme file'
(git commit -am 'added edited files.')
git log -3
git log -3 -p
git log -3 --stat
git log --pretty=oneline
git log --pretty=full
git log --pretty=format:"%h - %an, %ar : %s"
git log --pretty=format:"%h %s" --graph
git log --since=1.weeks
git log --author dc --pretty=oneline
gitk
修改最后一次提交
touch a.txt
git add a.txt
git commit -m 'added a.txt'
touch b.py
git add b.py
git ci --amend -m 'added txt and py together.'
最终只是产生一个提交
git log
取消已经暂存的文件
touch hello.py
touch test.py
git add .
git st
git reset HEAD test.py
git st
取消对文件的修改
git ci -m 'commit something.'
vim hello.py
git checkout hello.py
这条命令有些危险
任何已经提交到 Git 的都可以被恢复。你可能失去的数据,仅限于没有提交过的。
远程仓库的使用
git clone git://github.com/schacon/ticgit.git
git remote -v
添加远程仓库
mkdir hello
cd hello
git init
git touch readme
git add .
git ci -m 'first init.'
git remote add origin https://github.com/mitnk/hello.git
git push origin master
远程仓库的删除
git remote -v
git remote rm origin
git remote -v
git remote add origin git@github.com:mitnk/helloapi.git
从远程仓库抓取数据
git fetch origin master
git pull origin master
(git pull == git fetch & git merge)
Git 分支
分支的新建与切换
git st (Clean is better)
git branch -v
git branch dev
git branch -v
(Note we still at master branch)
git checkout dev
git branch -v
(Now we are on dev branch)
Case Study
git checkout -b iss53
(Fixing bug)
现在你就接到了那个网站问题的紧急电话,需要马上修补
git add .
git ci -m 'WIP: work on iss53'
(Commit current work)
git checkout master
(Now we back on master branch)
vim index.html
(Fixing bug)
git ci -am 'fixed bug in index.html'
(git push or something)
(Then we back to iss53)
git checkout iss53
(Finally, we finished issue 53)
git commit -am 'fixed issue 53'
将iss53合并到master分支
git co master
git merge iss53
git br -v
我们已经不再需要iss53分支,所以删除它
git br -d iss53
遇到冲突时的分支合并
git merge iss53
( CONFLICT (content): Merge conflict in index.html)
git st
vim index.html
(Editing conflict contents)
git commit -am 'merged issue 53 branch'
git br merged
git br --no-merged
利用分支进行开发的工作流程
仅在 master 分支中保留完全稳定的代码,即已经发布或即将发布的代码。与此同时,他们还有一个名为 develop 或 next 的平行分支,专门用于后续的开发,或仅用于稳定性测试 — 当然并不是说一定要绝对稳定,不过一旦进入某种稳定状态,便可以把它合并到 master 里。这样,在确保这些已完成的特性分支(短期分支,比如之前的 iss53 分支)能够通过所有测试,并且不会引入更多错误之后,就可以并到主干分支中,等待下一次的发布。
你可以用这招维护不同层次的稳定性。某些大项目还会有个 proposed(建议)或 pu(proposed updates,建议更新)分支,它包含着那些可能还没有成熟到进入 next 或 master 的内容。这么做的目的是拥有不同层次的稳定性:当这些分支进入到更稳定的水平时,再把它们合并到更高层分支中去。再次说明下,使用多个长期分支的做法并非必需,不过一般来说,对于特大型项目或特复杂的项目,这么做确实更容易管理。
在任何规模的项目中都可以使用特性(Topic)分支。一个特性分支是指一个短期的,用来实现单一特性或与其相关工作的分支。可能你在以前的版本控制系统里从未做过类似这样的事情,因为通常创建与合并分支消耗太大。然而在 Git 中,一天之内建立、使用、合并再删除多个分支是常见的事。(上面的iss53分支就是Topic分支)