Git简易参考手册

如果用过mercury(HG),那么理解Git的运作方式就轻松多了。两者是相同的分布式版本管理工具,只是某些功能有着细微的差别 - Git的管理粒度更加细腻,因此操作上也比HG复杂一点。例如,修改文件并提交,hg会自动跟踪到,并不需要你去手动add,但是在git里,无论新增还是修改,都必须add相应的文件才可以commit.这样概念上可以保持一致性(计算机的美学)。

安装和创建版本库:

sudo apt-get install git

创建全新仓库:

mkdir new_repo

cd new_repo

git init

此时即可创建一个全新的仓库。命令执行后,可以看到.git的隐藏文件夹,这是跟踪版本仓库的数据库。

远程克隆仓库:

git clone git@github.com:homer_simpson/repo_one.git

执行后会在本地创建同名文件夹repo_one

基本操作:

git reflog   // git历史操作

git add <filename>   // 新增filename 到版本库,或者修改了filename,提交到暂存区

git rm <filename>    // 从版本库移除filename

git commit -m "comment"  // 提交暂存区的内容到changeset,如果修改没有add/rm到暂存区,则提交不了修改

git log  // 查看历史提交,完整信息

git log --pretty=oneline  // 查看历史提交,单行显示

git log --graph   // 分支图形方式显示LOG

git log --abbrev-commit // 缩写方式显示LOG

git diff (<filename>)  // 查看未add/rm的修改内容

git diff HEAD -- readme.txt  // 查看已提交的修改内容

git diff <source_branch> <target_branch>  // 查看分支间差异

git status // 查看文件状态,新增/修改/删除,工作区/暂存区

git checkout -- <filename>  // 撤销工作区修改,暂存区和已提交的不受影响

git reset HEAD <filename> // unstage,暂存区撤销回工作区

git reset --hard HEAD^|<commit id>  // 修改HEAD指针到新位置(等效于撤销已提交的修改,放弃commit id后的所有修改)

HEAD代表当前指针,HEAD^前一个版本,HEAD^^往前第二个版本,HEAD~50往前50个版本

分支操作:

GIT管理系统里,每个分支对应一个指针指向当前分支的头部节点,HEAD通过指向分支指针从而指向某一分支的头部节点。

master分支是始终存在的。

如无特殊说明,merge分支优先使用fast-forward模式,如果不能FF,则用普通的merge

merge冲突时,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,此时直接编辑文件,add 文件并commit

git branch  // 查看分支

git branch <branch name>  //创建分支

git branch -d <branch_name >  // 删除分支

git branch -D <branch_name> // 强制删除分支(一般当这个分支没有merge到其他分支而被丢弃时)

git checkout <branch_name> // 切换分支

git checkout -b <branche_name> // 创建分支并切换过去

git merge <branch_name> // 将branch_name merge到当前分支,包括合并文件,add文件+commit

git merge -m "comment" <branch_name>  // 为merge的commit添加注释

git merge --no-ff -m "comment" <branch_name> // 禁用ff模式

工作区暂存:

git stash  // 当前分支的工作区内容暂存起来。此时git status是干净的

git stash list // 列出暂存区

git stash apply <stashname> // 恢复工作区

git stash drop <stashname> // 删除stash列表项

git stash pop  // 恢复stash顶端并删除

标签管理;

git tag // 查看标签

git tag <tag_name> // 在当前分支当前头打上标签

git tag <tag_name>  <commit id>  // 在某个commit上打上标签

git show <tag_name>  // 显示标签对应commit的内容

git tag -a <tag_name> -m "blablabla..."  //添加标签信息

git tag -d <tag_name>   // 删除本地标签

git push origin <tag_name>  // 推送本地标签

git push origin --tags  // 推送本地所有标签

git push origin :refs/tags/<tag_name>  //删除远程标签

远程协作:

几个基本概念:

远程引用:对远程仓库的引用,用一个名字标识,默认为origin.

远程分支:远端服务器上仓库里的分支。

远程跟踪分支:对远程分支状态的快照,用户不能自己修改,只有clone, fetch或者pull等同步到本地后变更,用于引用远程分支。名字为 remote/branch,例如origin/master

本地分支:本地仓库的分支。

跟踪分支:用于跟踪远程分支的本地分支,一般用于关联远程分支。

一般情况下,如果要远程协作,需要建立远程引用,关联本地跟踪分支到远程跟踪分支。

git clone时,自动创建远程引用,名字为origin;自动创建所有远程跟踪分支,包括origin/master;自动创建本地分支master并关联到origin/master上。git clone -o <remote>用于指定别的名字。因此,除了master外,其他分支需要自己手动创建跟踪分支。

git pull 只在当前分支是关联到远程分支上才有效,是git fetch和git merge的封装,只在当前分支上有效。

git remote添加远程引用的情形,所有工作都要自己完成。

所有的分支都是指针,并不是某一个changeset链条的实体,因此某一个“分支”可以自由指向任意链条,或者跟踪远程分支。

可以远程引用多个仓库,仓库名不同,这样fetch到本地后,多个仓库的远程跟踪分支可以共存。自己推动也可以指定任意仓库来推送。分支只是指针,如果多个仓库的changeset有交集,那么本地只有一份changeset链条拷贝,多个仓库的同名分支指向不同的结点。

查看远程分支信息:

git remote // 查看本地已有的远程引用

git remote -v // 查看远程仓库的详细信息 

git ls-remote (remote) // 查看remote上的远程引用

git remote show (remote) // 查看remote上的远程分支信息

本地仓库关联远程仓库(非clone):

git remote add origin git@github.com:homer_simpson/repo_one.git   //  创建远程仓库名字,即表示创建本地仓库和远程仓库的连接。origin是约定俗成的远程仓库的名字

git fetch origin  // 获取远程仓库更新的changeset,并更新远程跟踪分支到新位置(可能和本地跟踪分支分叉)

git merge origin/master   // 将fetch下来的更新,merge到当前分支

本地新分支推送到远端(跟踪关系自动建立):

git push origin serverfix // 推送本地分支更新,或本地新分支到仓库上

git push origin serverfix:serverfix // 等效于上一条命令

git push origin serverfix:awesomebranch // 推送本地分支到远程另一个名字的分支

对远端新分支建立本地跟踪分支:

git fetch origin  // 先获取远程新分支

git checkout -b serverfix origin/serverfix  // 建立serverfix分支为origin/serverfix的跟踪分支(指针指向origin/serverfix,以origin/serverfix为start point)

git checkout --track origin/serverfix  // 等效于上一条

git checkout -b sf origin/serverfix  // 用一个不同的本地跟踪分支名字

git branch -u|--set-upstream origin/serverfix  // 将当前分支跟踪到远程分支(当前分支变为远程分支的跟踪分支,分支只是指针,因此可以跳跃到任何地点)

拉取推送:

git pull  // git fetch + git merge,必须是跟踪分支

git push <remote>  <branch>  // 将branch的内容推送的remote,必须是个跟踪分支

git push -u origin master   |  git push --set-upstream origin master  // 第一次push,先关联本地分支和远程分支

删除远程分支:

git push origin --delete serverfix

Git系统配置:

git config --global user.name "Your Name"  //设置名字

git config --global user.email "email@example.com"// 设置邮箱地址

git config --global color.ui true  // 显示不同的颜色

git config --global alias.st status  // 配置别名

可在根工作区创建.gitignore,配置GIT不跟踪的文件,但是可用命令git add -f <file_name>强行添加, git check-ignore -v <file_name>可以检查当前文件是否被过滤。

.git/config保存全局配置。

原文地址:https://www.cnblogs.com/radiolover/p/7528656.html