git branch new_branch_name
Delete a local branch:
git branch -d branch_name
Push a local branch to remote:
git push origin branch_name
Delete a remote branch:
git push origin :branch_name
Look for branch information:
查看所有的branch
只查看remote 的branch
查看remote branch的详细信息
只显示branch的tag
git branch -a
git branch -r
git remote show origin
git ls-remote
switch branch:
git checkout branch_name
git checkout -b fixes 1b6d // -b表示新建branch查看当前config:
git config -e // 查看所有branch的信息
更改reposite:
git remote set-url origin git@github.com:KLabProject/katatema-ios-jp.git
Commit
git commit -a // Save changed files to stage(temporary)
Set email:
git config user.email hoge-h@klab.com
See Log:
git log
git reflog
Reset old commit:
- git reset --hard: 加载一个旧记录并删除所有比之新的记录。
- git checkout: 加载一个旧记录,但如果你在这个记录上玩,游戏状态将偏离第 一轮的较新状态。你现在打的所有游戏记录会在你刚进入的、代表另一个真实的分支 里
撤销
在法庭上,事件可以从法庭记录里敲出来。同样,你可以检出特定提交以撤销。
$ git commit -a
$ git revert 1b6d
讲撤销给定哈希值的提交。本撤销被记录为一个新的提交,你可以通过运行 git log 来确认这一点。
下载文件
得到一个由Git管理的项目的拷贝,通过键入:
$ git clone git://server/path/to/files
例如,得到我用来创建该站的所有文件:
$ git clone git://git.or.cz/gitmagic.git
我们很快会对 clone 命令谈的很多。
到最新
如果你已经使用 git clone 命令得到了一个项目的一份拷贝,你可以更新到最新版, 通过:
$ git pull git@github.com:klab-ou-h/GithubTest.git
把本地改动捡入到中心仓库:
$ git push
轻快多任务
比如你想并行开发多个功能。那么提交你的项目并运行:
$ git clone . /some/new/directory
Git使用硬链接和文件共享来尽可能安全地创建克隆,因此它一眨眼就完成了,因此你现 在可以并行操作两个没有相互依赖的功能。例如,你可以编辑一个克隆,同时编译另一 个。感谢hardlinking, 本地克隆比简单 备份省时省地。
现在你可以同时工作在两个彼此独立的特性上。比如,你可以在编译一个克隆的时候编 辑另一个克隆。任何时候,你都可以从其它克隆提交并拖拽变更。
$ git pull /the/other/clone HEAD
git pull origin KESHIN-336 // 从origin的KESHIN-336分支pull到当前分支
第 4 章 分支巫术
$ git checkout -b boss # Craete a new branch boss and switch to it.
$ git checkout master # 切到文件的原先版本
快速修订
你正在做某件事的当间,被告知先停所有的事情,去修理一个新近发现的臭虫,这个臭 虫在提交 `1b6d…`:
$ git commit -a
$ git checkout -b fixes 1b6d
那么一旦你修正了这个臭虫:
$ git commit -a -m "Bug fixed"
$ git checkout master
并可以继续你原来的任务。你甚至可以“合并”到最新修订:
$ git merge fixes //Merge branch fixes into the current branch.
合并
我们很久之前就遇到合并了。 pull 命令取出提交并合并它们到你的当前分支。如果 你没有本地变更,那这个合并就是一个“快进”,相当于中心式版本控制系统里的一个 弱化的获取最新版本操作。但如有本地变更,Git将自动合并,并报告任何冲突。
通常,一个提交只有一个“父提交”,也叫前一个提交。合并分支到一起产生一个至少 有两个父的提交。这就引出了问题: HEAD~10 真正指哪个提交?一个提交可能有多个 父,那我们跟哪个呢?
原来这个表示每次选择第一个父。这是可取的,因为在合并时候当前分支成了第一个父; 多数情况下我们只关注我们在当前分支都改了什么,而不是从其他分支合并来的变更。
你可以用插入符号来特别指定父。比如,显示来自第二个父的日志:
$ git log HEAD^2
你可以忽略数字以指代第一个父。比如,显示与第一个父的差别:
$ git diff HEAD^
你可以结合其他类型使用这个记号。比如:
$ git checkout 1b6d^^2~10 -b ancient
开始一个新分支 “ancient” ,表示第一个父的第二个父的倒数第十次提交的状态。
$ git branch -d part2 # 删除分支“part2”
$ git branch -m master part2 # 重命名“master”分支为“part2”。
$ git branch master HEAD~7 # 以七次前提交建一个新的“master”。
分支 master 只有第一部分内容,其他内容在分支 part2 。 我们现在后一个分支; 我们创建了 master 分支还没有切换过去,因为我们想继续工作在 part2 。这是不 寻常的。直到现在,我们已经在创建之后切换到分支,如:
$ git checkout HEAD~7 -b master # 创建分支,并切换过去。
第 5 章 关于历史
我认错
刚提交,但你期望你输入的是一条不同的信息?那么键入:
$ git commit --amend //更改上一条commit信息
来改变上一条信息。意识到你还忘记了加一个文件?运行git add来加,然后运行上面的 命令。
希望在上次提交里包括多一点的改动?那么就做这些改动并运行:
$ git commit --amend -a