基本配置命令
Git常用命令速查表
使用Git生成ssh密钥:
1 | ssh-keygen -t rsa -C "email@example.com" |
设置全局用户名和邮箱:
1 | git config --global user.name "YourName" |
初始化仓库
1 | git init |
添加文件到暂存区
1 | git add <filename> #添加指定文件到暂存区 |
提交文件到仓库
1 | git commit -m "描述信息" #提交更新 |
分支的创建、删除、和平、切换、查看
1 | git branch #查看Git仓库中已有的分支 |
合并分支过程中如果发生冲突则需要自己手动解决冲突,然后再提交。有冲突时,Git会显示哪个文件有冲突,并在冲突的文件中加上特殊的标识符号,解决完冲突后,要手动去掉这些被添加的标识符号。如果冲突比较复杂的话,最好使用其他工具来协助,通过git mergetool来启动。冲突一般是在不同的分支上对同一文件的同一位置内容进行了改动,并已提交到仓库中,这样在合并的时候就会发生冲突。
标签的添加、删除、查看
1 | git tag #查看标签 |
标签可以在需要的地方,为某个提交对象创建别名,这样以后我们就可以通过标签来查看一些信息,创建分支等。
查看工作目录状态
1 | git status |
在git命令执行后,要养成通过git status查看git状态的习惯,以便及时了解文件变化的情况。通过git status可以知道文件的状态(已修改未暂存、已删除、已修改并已暂存等待提交、未跟踪)。
查看提交历史
1 | git log |
通过git log可以查看当前分支的所有提交历史,知道每次提交的commit对象的ID以及提交时附加的描述信息等。要显示更多的信息,需要使用其支持的选项,如git log -p可以将每次提交的文件变化也显示出来。
查看指定的提交对象
1 | git show commit_id #查看指定的某次提交内容 |
通过
git log
可以显示整个提交历史,而通过git show commit-id
则可以查看指定的某次提交内容,当然git show -all
也可以显示出提交历史,另外还可以格式化显示内容。
Note : commit-id可以是commit对象对应的ID,也可以是HEAD,分支名,tag等。
查看工作区、暂存区、仓库之间的差异
1 | git diff #比较工作区与暂存区的差异 |
版本回退、撤销操作
1 | git reflog #显示提交历史的简介 |
有时候,由于我们的误操作,产生了一些错误,我们发现后希望能够及时纠正这些因为误操作而产生的结果,将工作目录恢复到某个正常状态。
- 撤销修改,但还没有添加到暂存区:
git checkout -- filename
修改的文件会被恢复到上次提交时的状态,修改的内容会丢失。 - 版本回退:先通过
git reflog
找到某个版本的commit_id
,然后用git reset --hard commit_id
将工作目录的文件恢复到指定的版本。 - 恢复工作区中被删除的文件(文件之前被提交到仓库中):
git checkout -- filename
或git checkout -f
备份工作区
1 | git stash #将工作区文件保存在Git内部栈中 |
如果正在一个develop分支上正在开发新功能,但这时master分支(稳定版本)突然发现了bug,并需要及时修复,而develop分支此时的工作还没有完成,且不希望将之前的工作就这样提交到仓库中时,这时就可以用
git stash
来暂时保存这些状态到Git内部栈中,并用当前分支上一次的提交内容来恢复工作目录,然后切换到master分支进行bug修复工作,等修复完毕并提交到仓库上后,再使用git stash apply [stash@{0}]
或者git stash pop
将工作目录恢复到之前的状态,继续之前的工作。
同时也可以多次使用git stash将未提交的代码压入到Git栈中,但当多次使用
git stash
命令后,Git栈里将充满了未提交的代码,这时候到底要用哪个版本来恢复工作目录呢?git stash list
命令可以将当前的Git栈信息打印出来,我们只需要将找到对应的版本号,例如使用git stash apply stash@{1}
就可以用版本号为stash@{1}的内容来恢复工作目录。
当Git栈中所有的内容都被恢复后,可以使用
git stash clear
来将栈清空。
将当前工作区目录文件压缩归档
1 | git archive --format=zip -o arch.zip HEAD |
远程操作
Git相比其他版本控制软件的一个优点就是大多数的操作都可以在本地进行,而不用管远程的仓库,因为操作是在本地,且操作的数据也是在本地,加上指针等原因,所以执行的速度就会比较快。 在多人协作的项目中,就需要涉及与远程仓库交互的问题,主要是如何从远程仓库抓取最新数据合并到自己的本地分支上,将自己的最新成果分享给其他人或让别人审查等 。
远程仓库的克隆、添加、查看
1 | git remote #显示已添加的远程仓库名 |
协同流程
- Fork远程项目
- 把Fork的项目clone到本地
- 执行以下命令,将别人的库添加为远端库
1 | git remote add 远端仓库名 远端的分支 |
- 运行以下命令,拉去合并到本地
1 | git pull 远端仓库名 远端分支名 |
- 编辑内容
- commit之后push到自己的库
- 登录Github,在你的首页可以看到一个
pull request
按钮,点击它,填写一些说明信息,提交即可。
在本地编辑内容前必须执行pull操作同步别人的远端库(这样避免冲突)
实用技巧
当手头工作没有完成时,先把工作现场
git stash
一下,然后去修复bug,修复后,再使用git stash pop
,回到工作现场.
多人协作技巧
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push 远程仓库名 分支名
,如果推送失败,先用git pull
抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。