git 用法
git 用法
远程分支切换问题
Git 配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
- /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
- ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
- 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
##用户信息
配置个人的用户名称和电子邮件地址:
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
创建一个 SSH key
$ ssh-keygen -t rsa -C "your_email@example.com"
代码参数含义:
-t 指定密钥类型,默认是 rsa ,可以省略。
-C 设置注释文字,比如邮箱。
-f 指定密钥文件存储文件名。
以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,
当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。
接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码),
当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到github上了.
添加你的 SSH key 到 github上面去
a、首先你需要拷贝 id_rsa.pub 文件的内容,你可以用编辑器打开文件复制,也可以用git命令复制该文件的内容,如:
`$ clip < ~/.ssh/id_rsa.pub``
b、登录你的github账号,从又上角的设置( Account Settings )进入,然后点击菜单栏的 SSH key 进入页面添加 SSH key。
c、点击 Add SSH key 按钮添加一个 SSH key 。把你复制的 SSH key 代码粘贴到 key 所对应的输入框中,记得 SSH key 代码的前后不要留有空格或者回车。当然,上面的 Title 所对应的输入框你也可以输入一个该 SSH key 显示在 github 上的一个别名。默认的会使用你的邮件名称。
如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
查看配置信息
要检查已有的配置信息,可以使用 git config --list 命令:
$ git config --list
http.postbuffer=2M
user.name=runoob
user.email=test@runoob.com
##基本概念
我们先来理解下Git 工作区、暂存区和版本库概念
工作区:就是你在电脑里能看到的目录。
暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
##Git 创建仓库
###git init
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。
在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变.
如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:
$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'
###git clone
我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。
克隆仓库的命令格式为:
git clone <repo>
git clone <repo> <directory>
参数说明:
repo:Git 仓库。
directory:本地目录。
比如,要克隆 ims0 代码仓库 root,可以用下面的命令:
git clone git://github.com/ims0/root.git
执行该命令后,会在当前目录下创建一个名为root的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。
如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字.
指定clone 的深度,或者时间, 来减少拉取无用的log
深度用 --depth
git clone 中加入参数 --depth=1,只拉取最近的一个 revision。
git clone --depth=1 https://github.com/torvalds/linux.git
指定log开始时间用 --shallow-since
git clone git://github.com/ims0/root.git --shallow-since "2017-10-22"
git clone git://github.com/ims0/root.git --shallow-since "2017-10-22 00:00:00"
git clone git://github.com/ims0/root.git --shallow-since="Mon Oct 23 13:38:21 2017 +0800"
git clone git://github.com/ims0/root.git --shallow-since="Oct 23 00:00 2017"
撤销操作
从暂存区恢复文件
用暂存区的文件覆盖工作区对某个文件的修改: git checkout – readme.md
这种情况用于readme.md 添加到暂存区后,又做了一些错误的修改,想恢复到暂存区的状态
无论readme.md 是否提交到仓库,都是以暂存区为模板来恢复。
从仓库恢复某个文件
加入一个工作区/暂存区/仓库都不一样,想要工作区恢复到和仓库一样
1,使用git reset HEAD 把仓库中的指定文件恢复到暂存区
2,使用git checkout – 把暂存区的指定文件恢复到工作区
版本退回
1,仓库版本覆盖整个工作区 git reset --hard HEAD
2,前一个仓库版本覆盖整个工作区 git reset --hard HEAD^
3,前两个仓库版本覆盖整个工作区 git reset --hard HEAD^^
4,前n个仓库版本覆盖整个工作区 git reset --hard HEAD~n
5,根据版本号回退 git reset --hard 版本号,(使用 git reflog 查看版本号)
版本前进
1, 打印log: git reflog
2, 根据id 前进到指定版本: git reset --hard commit_id
分支操作
总结创建与合并分支命令如下:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout –b name
合并otherBr分支到当前分支:git merge otherBr
删除分支:git branch –d name
删除未跟踪的文件
git clean -f
连 untracked 的目录也一起删掉
git clean -fd
连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd
git blame
显示指定行
git blame -L 40,60 foo
git blame -L 40,+21 foo
.gitconfig
[alias]
st = status
co = checkout
br = branch
ci = commit
pop = stash pop
last = log -1 HEAD
res0 = reset HEAD
res1 = reset HEAD^
reh0 = reset --hard HEAD
reh1 = reset --hard HEAD^
lg = log --color --graph --pretty=format:'%Cred%h%Creset %C(bold blue)<%an>%Creset ---%C(yellow)%d%Creset %s %Cgreen(%cr)' --abbrev-commit
d = diff --name-only
dv = difftool
[diff]
tool = vimdiff
[difftool]
prompt = false
trustExitCode = true
git 补丁的应用
创建patch 和diff
某次提交之前的 n 次提交,包括当前 id 一共 n 个提交
`git format-patch [commit id] -n提交`
例如最近的一次提交,生成patch文件git format-patch [commit id] -1
或者git format-patch HEAD^
应用patch
git apply patch
git push
git push origin HEAD:refs/for/master
来源:CSDN
作者:ims-
链接:https://blog.csdn.net/sinat_36219858/article/details/103755079