git 基础配置
配置信息—以用户信息为例
$ git config --global user.name 'your_name' $ git config --global user.email 'your_email@domain.com'
自动记录下git 账号信息,可自动保存账号密码
git config --global credential.helper store
使用指定ssh密钥,不指定默认在用户名/.ssh下
git config --global core.sshCommand "ssh -i ~/.ssh/id_rsa"
生成SSH密钥过程:
1.查看是否已经有了ssh密钥:cd ~/.ssh
如果没有密钥则不会有此文件夹,有则备份删除
2.生存密钥:
$ ssh-keygen -t rsa -C 'your_email@domain.com'
如果提示 ssh-keygen 不是内部命令或者。。。
这时候要配置环境变量,具体操作如下:
1.找到Git/usr/bin目录下的ssh-keygen.exe(如果找不到,可以在计算机全局搜索)
2.属性–>高级系统设置–>环境变量–>系统变量,找到Path变量,进行编辑,End到最后,输入分号,粘贴复制的ssh-keygen所在的路径,保存;
按3个回车,密码为空。
Your identification has been saved in /home/tekkub/.ssh/id_rsa. Your public key has been saved in /home/tekkub/.ssh/id_rsa.pub. The key fingerprint is: ………………
最后得到了两个文件:id_rsa和id_rsa.pub
仓库管理常用命令
git add 主要是把新文件或者文件变动的情况添加到暂存区 $ git add readme.md # 将 readme.md 文件添加到暂存区 $ git add . # 将当前工作目录的所有文件添加到暂存区 $ git add -u # 把修改之后的文件(这些文件已经被管理起来了)一次性提交到暂存区
暂存区的文件也是相当于被 git 管理了的。
git status 可以查看工作目录和暂存区的状态
$ git status
Tips:假如 bash 有颜色显示的话,会看到红色是代表工作目录,绿色代表暂存区。
git commit 命令进行提交,提交的历史会被记录下来
$ git commit -m 'Add readme.md' # -m 指定 commit 的信息 $ git commit # 这时候会跳出一个文本输入界面,让你输入更多的 commit 信息
git pull 命令进行先拉取远程仓库
$ git pull
git强制覆盖本地命令
git fetch --all && git reset --hard origin/master && git pull
git push 命令进行提交到远程仓库。
$git push
git 强制推送到远程仓库,且覆盖远程代码库。
git push -f --set-upstream origin master:master
git log 提交日志
git mv 将 git 管理的文件进行重命名 git mv readme readme.md # 使用git的方式对文件进行重命名 git rm 从 git 管理的文件删除某个已管理的文件,同时把修改的情况添加到暂存区 git log 命令查看提交历史,也就是版本演进历史 git log # 只查看当前分支(Head所指的分支)的log情况 git log --oneline # 简洁的显示版本更新信息 git log -n2 # n2 代表查看最近两次commit历史 git log -2 # 2 代表查看最近两次commit历史 git log -n2 --oneline # 简洁的显示最近两次的版本更新信息 git log branch_name # 后面跟上分支名表示查看该分支的log日志 git log -all # 列出所有分支的log git log --all --graph # 以图形化的方式查看 git log --oneline --all # 以简洁的方式查看所有分支的log git log --oneline --all -n4# 以简洁的方式查看所有分支的log git help log # 以web的方式查看log的帮助文档,等同于 git help --web log # 和上面那条效果一样
版本回退
git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
如果已经提交,并push到远程仓库
$ git reset --hard HEAD~3 # 回退上上上一个版本 $ git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。 commit $ git reset --hard origin/master # 将本地的状态回退到和远程的一样 注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
本地提交未到远程仓库
git reset --soft(撤销commit) git reset --mixed(撤销 commit 和 add 两个动作)
分支相关
分支就相当于一个独立的开发空间,比如前端和后端开发,前端开发可以建立一个分支,后端开发也可以建立一个分支,但是彼此在不同工作空间里面工作的时候是互不影响的,当需要集成的时候又可以把他们集成到一个公共的分支上面去。下面是有关分支的操作:
HEAD->temp2 表示当前的 HEAD 指向的是 temp2 分支,那么其实真正指向的是该分支最后一次 commit
git branch 查看分支情况、创建分支、删除分支 git branch -v # 查看本地分支的详细情况 git branch -a # 查看所有分支,包括远端分支,但没有过于详细的信息 git branch -av # 查看所有分支情况 git branch branch_name hash_value # 创建一个新的分支,基于 hash_value 的这个 commit 创建一个新的分支,hash_value 可以省略,那么默认是基于当前分支的最后一个 commit 创建。 git branch -d branch_name git branch -D branch_name # 这个分支已经有了一些 commit git checkout 切换分支或者创建分支 git checkout branch_name # 切换分支 git checkout master git checkout -b branch_name git_id # 创建一个新的分支并切换过去,git_id可以是hash_value,也可以是某个分支的名字(分支的名字其实就指向了某个 commit) git checkout -b temp 9ef147d git checkout -b temp2 master git checkout -b 本地分支名 origin/远程分支名 #从远程仓库里拉取一条本地不存在的分支时:这个将会自动创建一个新的本地分支,并与指定的远程分支关联起来。
git clone 指定分支
git clone不指定给分支时,默认会把远程仓库整个给clone下来,但只会在本地默认创建一个master分支。
如果远程还有其他的分支,此时用git branch -a查看所有分支:
$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/master
能看到远程的所有的分支,如remotes/origin/dev
可以使用checkout命令来把远程分支取到本地,并自动建立tracking:
$ git checkout -b dev origin/dev
或者使用-t参数,它默认会在本地建立一个和远程分支名字一样的分支:
$ git checkout -t origin/dev
直接clone指定分支
git clone -b--single-branch
例子:
git clone -b dev --single-branch https://github.com/dev/dev.git
关联分支
本地分支与远程分支关联
git branch --set-upstream-to=origin/remote_branch your_branch 其中,remote_branch是你本地分支要对应的远程分支;your_branch是你当前的本地分支。不关联分支无法推送
合并分支操作如下:
1、首先切换到master分支上
git checkout master
2、确保master代码是最新的代码
git pull origin master
3、然后我们把dev分支的代码合并到master上
git merge dev
4、然后查看状态及执行提交命令
git status
On branch master Your branch is ahead of ‘origin/master’ by 12 commits. (use “git push” to publish your local commits) nothing to commit, working tree clean
//上面的意思就是你有12个commit,需要push到远程master上
5、执行将刚才合并的代码,提交到master
最后执行下面提交命令
git push origin master
切换分支,必须在.git的同级目录下执行
比较 — git diff
2.5.1. 不同 commit、分支 之间进行比较
git diff hash_value1 hash_value2 # hash_value1 对应的 comimit 和 hash_value2 对应的 commit 进行比较 git diff hash_value1 hash_value2 -- file_name1 file_name2 # 在上述基础之上,只比较 file_name1、file_name2 这两个文件 git diff branch_name1 branch_name2 # 对两个分支进行比较 git diff branch_name1 branch_name2 -- file_name1 file_name2 git diff HEAD HEAD^ # HEAD 指向的 commit 与该 commit 的父亲 commit 进行比较 git diff HEAD HEAD^1 # 同上 git diff HEAD HEAD^^ # HEAD 指向的 commit 与该 commit 的父亲的父亲 commit 进行比较 git diff HEAD HEAD~ # HEAD 指向的 commit 与该 commit 的父亲 commit 进行比较 git diff HEAD HEAD~1 # 同上 git diff HEAD HEAD~~ # HEAD 指向的 commit 与该 commit 的父亲的父亲 commit 进行比较 git diff HEAD HEAD~2 # 同上
1.可以直接使用 HEAD,因为 HEAD 实际上指向的是某个 commit 的。同理,比较两个分支的差异其实就是比较两个分支最近 commit 的差异,因为分支名其实就是一个指针,指向的还是分支最近的 commit。
2.^ 后面只能跟数字1,一个 ^ 就表示往父亲 commit 这边追溯一个,以此类推
3.~ 后面跟任何数字都可,同样一个 ~ 就表示往父亲 commit 这边追溯一个,以此类推