Git 基本操作
Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 的读音为 /gɪt/。 Git 是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如很多 Freedesktop 的项目迁移到了 Git 上。
基础配置
-
git config --global user.email "i@tosone.cn"
-
git config --global user.name "Tosone"
-
git config --global credential.helper store
-
git config --global push.default simple
-
git config --global init.defaultBranch main
-
git config --global color.ui true
-
git config --global alias.co checkout
-
git config --global alias.ci commit
-
git config --global alias.st status
-
git config --global alias.br branch
-
git config --global core.editor vim
设置Editor使用vim -
git config -l
列举所有配置 -
用户的git配置文件
~/.gitconfig
-
echo "Host git.nane.cn KexAlgorithms +diffie-hellman-group1-sha1" >> ~/.ssh/config
给指定的站点添加特殊的加密算法
Git常用命令:查看、添加、提交、删除、找回,重置修改文件
git help <command>
显示command的helpgit show
显示某次提交的内容git show $id
git checkout -- <file>
抛弃工作区修改git checkout .
抛弃工作区修改git add <file>
将工作文件修改提交到本地暂存区git add .
将所有修改过的工作文件提交暂存区git rm <file>
从版本库中删除文件git rm <file> --cached
从版本库中删除文件,但不删除文件git reset <file>
从暂存区恢复到工作文件git reset -- .
从暂存区恢复到工作文件git reset --hard
恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改git commit <file>
git commit .
git commit -a
将git add, git rm和git commit等操作都合并在一起做git commit -am "some comments"
git commit --amend
修改最后一次提交记录git commit --amend
修改最后一次提交注释的,利用–amend参数git revert <$id>
恢复某次提交的状态,恢复动作本身也创建了一次提交对象git revert HEAD
恢复最后一次提交的状态
查看文件diff
git diff <file>
比较当前文件和暂存区文件差异git diff
git diff <$id1> <$id2>
比较两次提交之间的差异git diff <branch1>..<branch2>
在两个分支之间比较git diff --staged
比较暂存区和版本库差异git diff --cached
比较暂存区和版本库差异git diff --stat
仅仅比较统计信息
查看提交记录
git log
git log <file>
查看该文件每次提交记录git log -p <file>
查看每次详细修改内容的diffgit log -p -2
查看最近两次详细修改内容的diffgit log --stat
查看提交统计信息
Git 本地分支管理查看、切换、创建和删除分支
git br -r
查看远程分支git br <new_branch>
创建新的分支git br -v
查看各个分支最后提交信息git br --merged
查看已经被合并到当前分支的分支git br --no-merged
查看尚未被合并到当前分支的分支git co <branch>
切换到某个分支git co -b <new_branch>
创建新的分支,并且切换过去git co -b <new_branch> <branch>
基于branch创建新的new_branchgit co $id
把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除git co $id -b <new_branch>
把某次历史提交记录checkout出来,创建成一个分支git br -d <branch>
删除某个分支git br -D <branch>
强制删除某个分支 (未被合并的分支被删除的时候需要强制)
分支合并和 rebase
git merge <branch>
将branch分支合并到当前分支git merge origin/master --no-ff
不要Fast-Foward合并,这样可以生成merge提交git rebase master <branch>
将master rebase到branch,相当于:git co <branch> && git rebase master && git co master && git merge <branch>
Git 补丁管理(方便在多台机器上开发同步时用)
git diff > ../sync.patch
生成补丁git apply ../sync.patch
打补丁git apply --check ../sync.patch
测试补丁能否成功
Git 暂存管理
git stash
暂存git stash list
列所有stashgit stash apply
恢复暂存的内容git stash drop
删除暂存区
Git 远程分支管理
git pull
抓取远程仓库所有分支更新并合并到本地git pull --no-ff
抓取远程仓库所有分支更新并合并到本地,不要快进合并git fetch origin
抓取远程仓库更新git merge origin/master
将远程主分支合并到本地当前分支git commit --track origin/branch
跟踪某个远程分支创建相应的本地分支git commit -b <local_branch> origin/<remote_branch>
基于远程分支创建本地分支,功能同上git push
push所有分支git push origin master
将本地主分支推到远程主分支git push -u origin master
将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)git push origin <local_branch>
创建远程分支, origin是远程仓库名git push origin <local_branch>:<remote_branch>
创建远程分支git push origin :<remote_branch>
先删除本地分支(git br -d branch),然后再push删除远程分支git remote -v
查看远程服务器地址和仓库名称git remote show origin
查看远程服务器仓库状态git remote add origin git@github:robbin/robbin_site.git
添加远程仓库地址git remote set-url origin git@github.com:robbin/robbin_site.git
设置远程仓库地址(用于修改远程仓库地址)git remote rm <repository>
删除远程仓库
创建一个独立的分支
git checkout --orphan gh-pages
创建一个独立的分支git rm -rf .
删除当前分之下所有的文件rm '.gitignore'
删除配置文件- 进行一次提交后就可以在git branch的命令后看到分支名字
导出命令
git checkout 分支名 路径/文件名
检出某分支特定文件或者文件夹到当前路径git tag -a 0.1.3 -m "Release version 0.1.3"
git push origin --tags
提交所有标签git push origin v1.0:v1.5
推送本地的1.0到远端的1.5版本git archive -o ../updated.zip HEAD $(git diff --name-only HEAD^)
将本地未提交的修改打包出来git archive develop $(git diff v1.1.8_beta13..v1.1.8_beta14 --name-only) | gzip >aaa.zip
两个版本的不同将不同的地方打包出来