git 常用命令
1,配置你的信息:
git config --global user.name 你的名字
git config --global user.email 你的邮箱
--global 表示所有git仓库都会使用这个配置,为当前用户设置
git config --list/--l 查看所有配置信息
2,创建SSH Key
ssh-keygen -t rsa -C "youeamil@explode.com"
git ssh密钥地址 linux ~/.ssh window 你的用户目录下
有 id_rsa(私钥)和id_rsa.pub(公钥)两个文件
复制id_rsa.pub中文件,在github上SSH Keys中,点击Add SSH key把复制的信息粘贴就可以使用git了
测试命令 ssh git@github.com 也可以 ssh -T git@github.com
3,创建git仓库
git init
git add 文件名 把文件添加到git仓库暂存区
git commit -m "提交说明" 把文件提交到仓库
git commit --amend -m <msg> 修改提交说明
git commit -a -m "提交说明" 已经暂存过的文件跳过add,直接提交
commit 是一次性提交,add可以多次添加不同文件,add . 表示添加所有文件
4,链接远程仓库
查看远程库信息-》:git remote -v
克隆并创建仓库
git clone git@github.com:xiami99/xiami.git 克隆一个本地库
http://yourname:password@git.oschina.net/name/project.git 输入账号密码的方式(这里的账号和密码保存在密钥中)
关联远程仓库
git remote add origin git@github.com:xiami99/1234.git
首先 git pull origin master
然后 git push origin master
git push -u origin master
-u参数 git不但会把本地master分支推送到远程分支,还会把远程分支和本地分支关联起来
-----修改远程版本库地址
git remote set-url origin git@xxx.com.git
5,查看仓库状态和修改
git status 查看git仓库状态
git diff HEAD -- readme.txt 查看工作区和版本库的区别,也可查看HEAD^版本库的区别
git diff HEAD -- <file> 查看未提交版本库时某个文件的修改,添加暂存区后也可以查看
git diff <file> 查看工作区和版本库的区别,没有<file>参数即指所有文件
6,查看git日志
git log 显示从最近到最远的提交日志
git log --pretty-oneline 显示较少的日志信息
git log --graph 可以查看分支合并图
git log --graph --pretty=oneline --abbrev-commit 查看分支的合并情况
git log -2 查看最近2次的提交日志
git log --author="<pattern>" 根据提交作者,搜索提交历史 pattern 可以是字符串或正则表达式
git log --pretty=format:'%C(red)%h%Creset - %C(yellow)%s%Creset %cr' 提交日志添加颜色
git log --pretty=format:'%C(red)%h%Creset - %C(yellow)%s %cr' > commits.txt 提交日志输出到文件
git log后,请使用q 退出,否则会见到各种奇葩的不爽
参考
使用Linux的重定项来完成输入文件,点击这里查看参考
7,撤销修改
取消工作区修改
git restore <file>
取消工作区的修改(之前的修改将没有记录)
git restore .
取消所有工作区的修改
取消暂存区修改
git restore --staged <file>
取消暂存区的文件(将文件从暂存区放到工作区,修改还存在)
git restore --staged .
取消所有暂存区的文件
git reset HEAD <file> 取消暂存区文件
### 取消工作区修改
git checkout -- readme.txt 丢弃工作区的修改
命令中的--很重要,没有--就变成了创建一个新分支的命令
未提交到暂存区的文件,一种是撤销到和版本库一模一样的状态
提交到暂存区的文件,撤销到和暂存区文件相同的状态
### 取消commit提交
git reset --mixed HEAD~1 取消commit提交,add提交,不删除工作区内容
git reset HEAD^ 同上面一样
git reset --soft HEAD~1 取消commit提交,不取消add提交
get reset --hard HEAD~1 取消commit提交、add提交,删除工作区内容
8,版本回退
git reset --hard HEAD^ 回退到上一个版本
git reset --hard commit-id 到达commit-id版本
git reset commit-id file 文件回退到某个版本
git reflog 用来记录你的每一次命令
在git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,第一百个版本HEAD~100
9,删除文件
git rm test.txt 确认从git仓库中用命令git rm 删掉,并且git commit
git rm * -r 进入目录后,删除所有目录
git rm --cached <file> 删除仓库中的文件,保留本地文件
如果只是rm test.txt,那么是无法添加到暂存区和commit的,请使用git rm
10,分支
git branch 查看当前分支,前面有*号的是当前分支
git branch -a 查看所有分支
git branch <name> 创建分支
git switch <name> 切换分支 git checkout <name>
git switch -c <name> 创建+切换分支 git checkout -b <name>
git merge <name> 合并某分支到当前分支
git branch -d <name> 删除本地分支(合并后的分支)
git branch -D <name> 强制删除本地分支(未合并的分支)
git push -d origin <branch-name> 删除远程分支
git remote show origin 查看远程仓库
git branch -vv 查看本地分支和远程分支是否跟踪
git branch --set-upstream-to <branch-name> <orgin/branch-name>
11,合并分支
git merge <name> 用于合并指定分支到当前分支(默认为快进模式合并-》Fast-forward)
git merge --no-ff -m "合并提交记录" <branch-name> merge时生成一个新的commit记录
Fast-forward 表示这次合并是快进模式,合并速度很快
12,解决合并分支冲突
提示冲突后,使用git status 查看,找到冲突文件,然后打开修改
<<<<<<< HEAD
这里是当前分支冲突信息
=============
test分支冲突信息
>>>>>>> test
然后 git add,git commit,最后就可以删除指定分支了
我的理解是两个相同文件名的文件合并分支的话只能保存一个文件的内容
13,分支管理
git merge --no-ff -m "merge with no-ff" dev
使用--no-ff,在merge时会生成一个新的commit,从分支历史上就可以看出分支信息
而fast forward合并就看不出来曾经做过合并
14,Bug分支
一般修改bug,都是创建bug分支,修改bug后,合并后删除bug分支。
但当接到紧急修复bug任务,工作区的工作做了一半时,可以先将工作区的内容保留下来。
git stash 将当前工作区的内容影藏起来
git stash push -m "msg" 工作区内容隐藏并添加注释
git stash pop 将工作去内容恢复,并删除储藏列表(stash list)
git stash pop stash@{id} 指定那个区域
git stash apply 将工作内容恢复,不删除出储藏列表
git stash apply stash@{id} 推荐使用这种方式
git stash drop 删除储藏列表
git stash list 查看影藏列表
git cherry-pick <commit-id> 复制特定的提交到当前分支
git cherry-pick --continue 合并发生冲突,git add 后,使用当前命令
git cherry-pick --abort 发生冲突后,放弃更改,回到冲突前的版本
参考
15,删除分支
git branch -d dev
git branch -D dev 如果dev分支没有合并,是不能删除的,可以使用-D强制删除,这中情况用在当前分支无作用的情况下
git branch -r -D 删除远程分支
16,查看远程库信息
git remote 查看远程库信息,默认是origin
git remote -v 显示更详细的信息,显示可以抓取和推送的origin地址,没有推送权限,就看不到push地址
17,忽视特殊文件
在git根目录创建.gitignore 文件,然后填写要忽略的文件,或者忽略后缀名的,最后把.gitignore 提交到git
使用*.html 忽略后缀为.html 的文件
使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,
它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了
个人亲测很管用的
18,配置别名
git config --global alias.st status 这一行命令,告诉git以后st就表示status
git config --global alias.unstage 'reset HEAD' 撤销暂存区的修改,回到当前版本,重要的多个字符用引号
每个仓库的git配置文件都在.git/config 文件中
当前用户的git配置文件放在用户主目录下的一个隐藏文件 .gitconfig 中
19,git标签
git tag <tag-name> [commit-id] 创建标签,不指定commit-id,则为HEAD
git tag -a <tag-name> -m "commit-desc" [commit-id] 创建标签和提示
git tag 查看所有标签
git show <tag-name> 查看指定标签信息
git reset --hard <tag-name> 恢复项目到指定标签
git 支持多种协议,包括https,但通过ssh支持的原生git协议速度最快
Merge made by the 'recursive' strategy 一个正常的版本库的合并
如下是合并造成冲突的提示 Automatic merge failed; fix conflicts and then commit the result
增加远程地址的时候带上密码也是可以的。(推荐)
http://yourname:password@git.oschina.net/name/project.git
参考
如果您看了本篇博客,觉得对您有所收获,请点击右下角的 [推荐]
如果您想转载本博客,请注明出处
如果您对本文有意见或者建议,欢迎留言
感谢您的阅读,请关注我的后续博客