常用操作命令
- 获取当前仓库的所有分支:
git fetch
- 拉取当前分支最新代码:
git pull
- 查看当前分支工作区的更改
git status
- 查看具体更改内容
git diff
- 将当前更改的文件添加到暂存区
git add <filename>
;或者git add .
将全部的更改一次性都添加到暂存区 - 将暂存区的修改提交到分支并提交修改备注:
git commit -m ' commit mesage'
- 将当前分支更改的内容推送到远程:
git push
- 如果当前分支还没有和远程分支建立联系,推送的时候会提示执行:
git push --set-upstream origin <分支名>
撤销操作
- 5步之前
git checkout .
撤销全部更改,或者git checkout --<filename>
撤销某个文件 - 5步之后
commit
之前 把提交到暂存区的修改回退到工作区,git reset HEAD <file>
- 如果已经
commit
了想撤回 走版本回退
版本回退
git log
可以查看近期的commit的版本记录- 回退到上一个版本
git reset --hard HEAD^
- 如果需要回退到指定版本:可以通过
commit id
(11步可以拿到)git reset --hard <commit id>
删除文件
- 直接在文件管理器删除或者用rm命令删除:
rm <filename>
14
之后git status
可以看到有文件被删除了,- 如果想撤回
14
的删除操作:git checkout -- - 如果确定要删除并且要提交到版本库:
git rm <filename>
,git commit -m 'remove file'
添加远程库
假如你是先创建了一个本地库(本地目录test-git下运行git init
),又在GitHub创建了一个Git仓库,并且让这两个仓库进行远程同步。
- 登录GitHub, 右上角’Create a new repo‘按钮点击创建一个新的空仓库假如名为testgit
- 要讲本地库与远程库相关联,在本地的testgit仓库下运行:
git remote add origin git@github.com:<your github name>/test-git.git
。关联一个远程库时必须给远程库指定一个名字,origin
是默认习惯命名; - 运行
git push -u origin master
将本地库的所有内容推送到远程;origin
是远程库的名字,这是Git的默认叫法,由于远程库是空的,第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。 - 推送成功后,可以在GitHub页面中看到远程库的内容已经和本地的一样了。
从远程库添加
这是比较推荐的方式,先创建远程库,然后从远程库克隆。
- 登录GitHub,创建新的仓库test-git
- 创建完成后克隆到本地
git clone git@github.com:<your github name>/test-git.git
删除远程库
git remote -v
查看远程库信息:
$ git remote -v
origin git@github.com:<your github name>/test-git.git (fetch)
origin git@github.com:<your github name>/test-git.git (push)
git remote rm origin
解除本地和远程的绑定关系- 要想真正删除远程库,登录GitHub,在页面中找到该仓库的删除操作删除
分支管理
-
git branch
命令查看所有分支 -
切换分支
git checkout master
或者git switch master
-
合并分支:运行
git merge dev
将dev分支合并到当前分支 -
git branch -d dev
删除dev分支。如果该分支有提交未进行合并,则会删除失败。 -
如果要丢弃一个没有被合并过的分支,通过
git branch -D <name>
强行删除。如果该分支有提交未进行合并,也会删除成功。 -
创建并切换到新分支
git checkout -b <name>
或者git switch -c <name>
-
使用
git stash
可以把当前工作现场临时“储藏”起来去修复bug -
查看保存过的stash,运行
git stash list
-
恢复工作现场:
git stash apply
恢复git stash drop
删除。或者git stash pop
恢复的同时把stash内容也删了。你可以多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash,用命令:git stash apply stash@{0}
合并代码前要
git pull
拉取到最新代码,合并时如果有冲突无法快速合并要先解决冲突再提交。解决冲突就是把合并失败的文件手动编辑为你希望的内容再提交。 -
cherry-pick
命令可以用来复制一个特定的提交(比如临时修复的bug)到当前分支:git cherry-pick 4c805e2
4c805e2是这个特定提交的commit id.
标签操作
- 查看当前所有tag:
git tag
- 打标签
git tag v1.0
git tag -a v0.1 -m "version 0.1 released" 1094adb
.-a
指定标签名,-m
指定说明文字- 默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,可以找到历史提交的commit id,执行
git tag v0.9 f52c633
为指定的提交打标签 - 查看当前标签信息
git show <tagname>
- 删除没有推送到远程的本地标签:
git tag -d v0.1
- 如果标签已经推送到远程,要删除远程标签需要先从本地删除:
git tag -d v0.1
;然后,从远程删除:git push origin :refs/tags/v0.1
- 推送标签到远程
git push origin <tagname>
;或者,git push origin --tags
,一次性推送全部尚未推送到远程的本地标签
为常用操作配置别名
git config --global alias.st status
用st
表示status
.同理可以配置下面一些操作git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
. 把暂存区的修改撤销掉(unstage),重新放回工作区git config --global alias.last 'log -1'
显示最近一次提交
这些配置加上--global
是针对当前用户起作用,如果不加,那只针对当前的仓库起作用。每个仓库的Git配置文件都放在.git/config
文件中;cat .git/config
查看配置,修改配置内容。而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig
中;cat .gitconfig
查看配置并修改。
git 的工作区和暂存区
你本地被git所管理的文件夹就是一个git工作区
工作区有一个隐藏目录.git
,它是git的版本库
git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有git自动创建的第一个分支master
以及指向master
的一个指针HEAD
.
SSH key的配置
- 生成SSH key:
ssh-keygen -t rsa -C "your mail address"
- 登录GitHub 添加SSH Key(公钥)
- 进入.ssh目录:
cd ~/.ssh
- 查看文件目录:
ls
- 在终端查看私钥:
cat id_rsa
- 在终端查看公钥:
cat id_rsa.pub
git merge 和 git merge --no-ff的区别
合并代码时如果不带--no-ff
参数,Git会用Fast forward
模式合并。这种模式下,删除分支后,会丢掉分支信息。
如果用--no-ff
参数强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。