Git常用命令
- git官网:git-scm.com
设置个人身份:用户名和Email地址
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
- 你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的
全局用户名和邮箱设置
- 注意git config命令的—global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址
- 安装完成后需要此操作方能使用git命令,但是用户名和邮箱可以任意设置
# 一般方法
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
# 在Mac下用如下命令设置全局姓名和email(其他也可)
git config --global --edit #会用vi打开文件编辑全局配置文件(~/.gitconfig)
git commit --amend --reset-author #似乎用来提交时重设作者,此处有疑问
每个项目单独的用户名和密码
- 在每个项目的.git目录中的config文件中添加:
[user] name = your_name_for_this_project email = you_email_for@this_project
一般使用流程
- 创建目录并初始化git仓库->增加文件并添加到仓库控制中->提交
# 创建新的库
mkdir learngit
git init #在库所在文件夹内
# 增加文件(对于修改后的文件也要重新执行该命令)
git add filename
# 提交
git commit -m "message is necessary"
# 查看仓库状态
git status
# 查看文件和库中的不同
git diff filename
# 显示提交日志
git log
git log --pretty=oneline
# 图形化显示
git log --graph --pretty=oneline --abbrev-commit
版本回退
- 基本法:当前版本HEAD,上一个版本:HEAD^,再上一个版本:HEAD^^,上100个:HEAD-100
git reset --hard HEAD^ #HEAD是指向当前版本的指针 git reset --hard 3628164 #完整版本号id的前几部分
- 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
#显示你的每一次命令 git reflog
- 查看工作区和版本库里面最新版本的区别
git diff HEAD -- filename
撤销修改
- 文件提交过程:工作区(vi等编辑器直接编辑后)->暂存区(git add之后)->永久版本(git commit后)
- 在git add到暂存区前可以丢弃工作区的修改,即添加到最近一次git commit或git add后的状态
git checkout -- filename
- 已经git add后,撤销暂存区某个文件的修改,然后执行丢弃工作区修改的命令彻底撤销工作区的修改
git reset HEAD filename
- 删除文件:先本地rm命令删除后执行如下命令,记得commit
git rm filename # 如果本地rm后发现删除错了 git checkout -- filename #和版本库同步
.gitignore文件
- 这是仓库的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。github官方准备的各种忽略配置文件:https://github.com/github/gitignore
# 被.gitignore忽略后可以强制添加文件 git add -f filename # 检查.gitignore文件 git check-ignore -v addingfailedfilename
github
免账号和密码同步到github.com的方法
- 如果~/.ssh中无id_rsa.pub则用下边密码创建。一直按enter跳过输入密码的部分
ssh-keygen -t rsa -C "youremail@example.com" #测试发现邮箱乱填都行
- 登陆github,点击setting->SSH and GPG keys->New SSH keys。然后将id_rea.pub的内容复制到其中即可。如果没有成功可能有id_rsa文件权限问题或者用了https协议而不是ssh
推送本地到github新仓库和克隆到本地
- 将本地有的仓库推送到github.com上
- 在github.com点击Create a new repo创建新的仓库
- 关联远程仓库
git remote add origin git@github.com:githubusername/repositoryname.git #或者https://github.com/githubusername/repositoryname.git #含义为增加一远程取名为origin(也可取为其他)
- 推送:第一次推送master分支的所有内容
git push -u origin master #第一次推送需要-u参数,以后不用。把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到一名字叫origin的远程
- 克隆到本地
# 克隆一个本地库 git clone git@github.com:github_username/repositoryname.git
远程库操作
- 查看远程仓库信息
# 查看远程仓库的信息 git remote # 详细的信息 git remote -v
- 删除或重新关联远程库
# 删除已经关联的远程库(包括删除了origin这个名字) git remote rm origin # 关联远程库,取另一个名字 git remote add localrepositoryname remoterepositoryname
另有一个提供私有库的网站:gitee.com
分支
- 创建并切换分支。PS:暂存区是通用的,因而在commit前切换分支,所有文件的未提交更改可见。当在一个分支上提交修改后,切换到其他分支后该修改才不可见
git checkout -b branchname # 相当于 git branch branchname git checkout branchname
- 查看所有和当前分支
git branch
- 合并指定分支到当前分支
git merge other_branch_name # 合并分支:git会尽可能用Fast forward模式,先删除掉分支,这会丢失分支信息 # 如下命令禁用Fast forward模式并在merge时候生成一个新的commit git merge --no-ff -m "merge message" branchname
- 删除分支
# 删除分支 git branch -d branchname # 强行删除未合并的分支 git branch -D branchname
- 分支的远程推送和下载
# 推送分支 git push orgin branchname # 在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定! # 创建远程的分支到本地 git checkout -b branchname1 orgin/branchname2 # 指定本地和远程的分支的链接 git branch --set-upstream branchname1 origin/branchname2 # 推送失败则因为远程比本地新,用如下命令拉远程到本地,再push git pull
工作现场
- 用于工作区的临时保存和恢复
# 储存当前的工作现场 git stash # 查看工作现场列表 git stash list # 恢复现场(但不删除) git stash apply # 删除现场 git stash drop # 恢复并删除 git stash pop # 恢复指定的stash git stash apply stash@{number}
标签
- 用于标记正式版本
# 打标签 git tag tagname git tag -a tagname -m "tagnessage" commitid # 查看所有标签 git tag git show tagname # 查看标签详细信息 # 对特定的commit打标签 git tag tagname commitid # 用私钥签名一个标签,必须首先安装GnuPG git tag -a tagname -m "tagnessage" commitid # 删除标签 git tag -d tagname # 推送一个或全部尚未推送的本地标签到远程 git push origin tagname git push origin --tags # 删除已推送到远程到标签 git tag -d tagname #先删除本地的标签 git push origin :refs/tags/tagname #远程删除
其他内容
资料
- 相关类似工具
- BitKeeper
- Mercurial
- Bazaar
git Cheat Sheet
- 廖雪峰提供国外网友制作的Git Cheat Sheet,建议打印出来备用。见其网站
设置命令别名
git config --global alias.selfdefinedcmd realcmd
git config --global alias.selfdefinedcmd 'a long cmd expression'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" #示例
# 配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。每个仓库的Git配置文件都放在.git/config文件中。
其他命令(需要时再补充)
git显示颜色
# 设置让git显示颜色
git config --global color.ui true
查看跟踪了哪些文件
git ls-files
不下载历史记录只下载当前最新提交文件
git clone git://repo_url.git -depth=1
查看文件每一行详细修改信息
git blame file_name
git blame -L 100,+20 file_name #看100到100+20行
Ref