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 $idgit 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 diffgit diff <$id1> <$id2>比较两次提交之间的差异git diff <branch1>..<branch2>在两个分支之间比较git diff --staged比较暂存区和版本库差异git diff --cached比较暂存区和版本库差异git diff --stat仅仅比较统计信息
查看提交记录
git loggit 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 pushpush所有分支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两个版本的不同将不同的地方打包出来