git游戏通关流程 init 初始化
config 配置 1
git config --local user.name xxxx
1
git config --local user.email xxxx.qq.com
add 添加
commit 提交 1
git commit -m "add README"
clone 克隆 1
git clone https://github.com/Gazler/cloneme
clone to folder 克隆到文件夹 1
git clone https://github.com/Gazler/cloneme my_cloned_repo
ignore 忽略
*.swp
include 包含
*.a !lib.a
status 状态
Number of files committed changes to be committed 暂存状态 changes not staged for committed 修改未暂存状态 untracked files 未跟踪状态
rm 从仓库删除文件
1
git commit -m "remove deleteme.rb"
rm_cached 仅从stagin area中移除 1
git rm --cached deleteme.rb
stash 临时提交
rename 重命名 1
git mv oldfile.txt newfile.txt
需要文件是已跟踪状态才可以使用
restructure 移动所有文件到文件夹
需要在git bash下执行,win cmd下只能rename单个文件
log 记录
1
git log --oneline --graph
git log -1 –pretty=raw,可以查看commit之间的父子关系,如下图所示,需要注意的是最开始的commit是没有父提交的。
tag 为提交打标签
1
git push --tags origin master
commit amend 提交中补上文件 1
git add forgotten_file.rb
会进入编辑界面修改备注信息,:wq保存退出
commit in feature 指定一个时间 1
git commit --date=10.12.2016T17:17:00
在vim中编辑,添加add README,:wq保存退出
reset 取消已经暂存的文件
1
git add to_commit_first.rb
或1
git reset HEAD to_commit_second.rb
1
git commit -m add to_commit_first.rb
git reset 用仓库的版本覆盖staging area中的,如果working directory该文件没有修改,则staging area中的修改应用到working directory中。反之working drietoty中的版本保留,丢弃staging area中的修改。
git checkout则是使用staging area中的版本覆盖working directory。
rest soft 撤销上一次提交
–soft 参数将上一次的修改放入staging area
–mixed 参数将上一次的修改放入working directory
–hard 参数直接将上一次的修改抛弃 HEAD 最近一个提交 HEAD^ 上一次提交 HEAD^^ 上一次的 上一次的提交(倒数第三次) HEAD^^^ 倒数 第四次的 提交 HEAD~0 最近一个提交 HEAD~1 上一次提交 HEAD^2 上一次的 上一次的提交(倒数第三次) HEAD^3 倒数 第四次的 提交
1
“^”代表父提交,当一个提交有多个父提交时,可以通过在”^”后面跟上一个数字,表示第几个父提交,”^”相当于”^1”.
1
checkout只会移动HEAD指针,reset会改变HEAD的引用值。
1
HEAD~2 = HEAD^^ = HEAD^1^1
checkout file 抛弃修改
修改未提交到暂存区
remote 查看远端
remote url 查看远端url
pull 拉取
git pull origin remote : local git push origin local : remote
remote add 添加远端仓库 1
git remote add origin https://github.com/githug/githug
push 推送 1
2
git rebase origin/master
git push origin master
diff 对比
git diff: 查看 working directory 与 staging area 之间的差异
git diff –cached: 查看 repository 与 staging area 之间的差异
git diff HEAD: 查看 working directory 与 repository 之间的差异
blame 查看文件修改人
branch 创建查看分支
checkout 检出
git checkout -b my_branch创建并切换
checkout tag 切换到特定标签
checkout tag over branch 标签分支重名情况下切换
分支和标签重名情况
branch at 根据提交创建新分支 1
git branch test_branch HEAD^^
delete branch 删除分支
push branch 推送分支 1
git push origin test_branch:test_branch
merge 合并分支
fetch 获取远端修改
获取远端的修改,但是并不合并到当前分支。其实,git pull 就是 git fetch 和 git merge 组成的。
rebase 重新基于
1
git rebase master feature
git rebase 这个命令。大概意思是从某个提交分化出两个分支,然后其中一个分支需要将另一个分支的修改合并过来,但是又不想在提交记录上留下两个分支合并的痕迹,只留下一个分支以前后顺序记录两边的修改。 git rebase 一个分支的所有修改在另一个分支上重新应用一遍,所以在提交记录上看,会发现一个分支的所有提交在另一个分支之前或者之后。然后删除另一个被合并的分支,保持分支简洁。 git rebase master feature 表示将 feature 上的修改在 master 上重新应用一遍 需要非常注意的是,不要 rebase 哪些已经推送到公共库的更新
repack 打包
cherry pick 应用提交修改
1
git cherry-pick ca32a6dac7b6f97975edbe19a4296c2ee7682f68
grep 搜索
git grep支持各种条件搜索及正则表达式
rename commit 重命名提交 1
git rebase -i 3c2a40935b12a56edf6063925aae619147ecfd01
pick :不做任何修改;
reword:只修改提交注释信息;
edit:修改提交的文件,做增补提交;
squash:将该条提交合并到上一条提交,提交注释也一并合并;
fixup:将该条提交合并到上一条提交,废弃该条提交的注释;
如果删除了某行记录,比如删除“pick G 注释”,这条提交也会被删除。
squash 合并提交
将弹出编辑页的第2、3、4行的pick改为squash
merge squash 分支所有修改应用成一个提交 1
git merge --squash long-feature-branch
将某个分支上的所有修改都应用成一个提交。默认修改都将进入暂存区
reorder 从新排列提交
重新排列提交顺序
bisect 快速定位错误版本 1
git bisect start master f608824888b83
1
git bisect run make test
git bisect start master f608824888b83 中,master 是有 bug 的节点,f608824888b83 是没有 bug 的节点。
stage lines 提交文件部分修改
e编辑提交内容
find old branch 列出操作记录
1
git checkout solve_world_hunger
查看操作历史
revert 回滚
与 reset 不同的是,revert 只会撤销当前的 commit,而之后的 commit 操作的修改还会保留,但是reset 还会将之后的所有 commit 操作的修改全部退回 staging area 或丢弃。
restore 恢复
git reflog 可以查看所有的操作记录,所以只要能找到误操作之前的 commit id,一样能够恢复现场。
conflict 冲突
编辑poem.txt文件,处理冲突
1
git ci -m 'merge mybranch`
submodule 子模块 1
git submodule add https://github.com/jackmaney/githug-include-me