git 常用命令整理
根据自己在项目中使用比较多的,总结了以下比较常用的git命令:
#关系图
远程仓库(Remote) - 本地仓库(Repository) - 暂存区(Index) - 本地工作空间(Workspace)
-------------------------------------------------
#git个人邮箱昵称配置
git config --global user.email "xxx@example.com"
git config --global user.name "xxx"
如果用了 --global
选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global
选项重新配置即可,新的设定保存在当前项目的 .git/config
文件里。
#查看已配置信息
git config --list
#直接查阅某个环境变量的设定
git config user.name
#生成秘钥(ssh key)
-- 在路径~/.ssh/my_rsa_1下生成一个4096位的公钥私钥,公钥结尾注释为my-rsa-1
ssh-keygen -t rsa -b 4096 -C "my-rsa-1" -f ~/.ssh/my_rsa_1
当然也可以简单使用
ssh-keygen -t rsa
根据提示一步步设置
-- ssh-keygen 参数
-C comment注释
-f file路径
-b bits位数
#git clone时出现
Permissions 0670 for '/home/xxx/.ssh/id_rsa' are too open.
直接
chmod 400 ~/.ssh/id_rsa
即可
#秘钥存放地址
cd ~/.ssh
#仓库初始化(删除仓库的话把目录下的 .git 目录删除即可)
git init
tips: ls -al 会看到有个.git文件夹
#仓库初始化(裸仓)
git init --bare
-------------------------------------------------
-------------------------------------------------
#把文件加到暂存区(stage/index)
git add test.txt
或(.代表当前目录下的所有)
git add .
#提交(暂存区的所有内容提交到本地仓库)
git commit -m "commit mark"
#提交(-a 会将修改或者删除的文件自动加到暂存区,但是新增文件不会;如果没有新增文件的话就相当于add & commit)
git commit -a -m "commit mark"
#查看仓库当前的状态
git status
-------------------------------------------------
-------------------------------------------------
#克隆(-o 参数可以命名远程主机名,默认为origin)
git clone https://github.com/jquery/jquery.git
git clone -o qewr https://github.com/jquery/jquery.git
#列出所有远程仓库
git remote -v
#查看远程仓库详细信息
git remote show <主机名>
#将一个库加到自己主机上 命名为 qwer
git remote add <主机名> <网址>
git remote add qwer git@github.com:ddmmddmm/wuziqi.git
#删除远程库配置
git remote rm <主机名>
git remote rm qwer
#更改远程仓库名称
git remote rename <原主机名> <新主机名>
git remote rename qwer getAsdf
-------------------------------------------------
-------------------------------------------------
#下载远程仓库的所有变动
git fetch [remote]
#取回远程仓库的变化,并与本地分支合并
git fetch origin master
git pull [remote] [branch]
#将本地分支推送到远程仓库
git push origin dev:dev
意思是“上传我本地的 dev 分支到远程仓库中去,仍旧称它为 dev 分支”
或者 git push origin dev
#将本地分支推送到远程仓库并建立追踪关系
git push -u origin dev:dev
-------------------------------------------------
-------------------------------------------------
#恢复暂存区的指定文件到工作区
git checkout [file]
#重置暂存区与工作区,与上一次commit保持一致
git reset --hard
#回退到上个commit
git reset --hard HEAD^
#回退到上上个commit(在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100)
git reset --hard HEAD~2
#重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]
#撤销某个commit的修改,并自动提交一个commit
(revert 撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史,而reset会直接移动分支指针,revert只针对一个)
git revert [commitId]
#查看某个文件修改内容
git diff test.txt
#显示具体的某次的改动的修改
git show [commitId]
#查看提交记录(--pretty=oneline 参数可以单行显示)
git log
#查看操作记录(如果回退版本之后,又想恢复到当前版本,可以通过此命令查到commit_id,从而恢复)
git reflog
#删除文件(记得commit)
git rm xxx
#删除远端的文件夹,但不改动到本地目录
例如删除远端的.idea文件夹,注意此句执行之后需要commit 和 push
(--cached: Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.)
git rm -r --cached \.idea
-------------------------------------------------
-------------------------------------------------
#查看本地分支
git branch
#列出所有远程分支
git branch -r
#列出所有本地分支和远程分支
git branch -a
#创建分支
git branch dev
#切换分支
git checkout dev
#创建+切换分支
git checkout -b dev
#合并dev到当前分支
git merge dev
#删除分支
git branch -d dev
#查看分支的追踪关系
git branch -vv
#本地分支与远程分支建立关联(git pull,git push时可以不用指定,另一个更为简洁的方式是初次push时,加入-u参数)
git branch --set-upstream-to=origin/dev_xxx dev_xxx
-------------------------------------------------
-------------------------------------------------
#列出所有tag
git tag
#新建一个一个叫"myTag"的tag在当前commit
git tag myTag
#新建一个tag在指定commit(这时候会弹出一个界面,加一下注释,:wq)
-- a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。 我推荐一直创建带注解的标签
git tag -a myTag fdafa1f754950d73a5b8ac819fb015e3d50b4907
#删除本地指定tag
git tag -d myTag
#查看tag信息
git show myTag
#提交指定tag
git push origin myTag
#提交所有tag
git push origin --tags
-------------------------------------------------
-------------------------------------------------
#将当前的修改储藏起来
git stash
#将当前的修改储藏起来并添加备注信息,在list中可以看到
git stash save 'msg'
#查看储藏堆栈
git stash list
#从储藏中恢复最近一个,但不删除
git stash apply
#从储藏中恢复指定的stash,但不删除(stash@{2}在list中可以看到)
git stash apply stash@{2}
#从储藏中恢复最近一个,并删除(stash@{2}在list中可以看到)
git stash pop
#从储藏中恢复指定的stash,并删除(stash@{2}在list中可以看到)
git stash pop stash@{2}
#从储藏中删除
git stash drop stash@{2}
-------------------------------------------------
-------------------------------------------------
#本地代码首次上传到github
1.先在github中建一个仓库
2.本地初始化git仓库
git init
3.在github中复制仓库地址新建远程主机
git remote add origin git@github.com:ddmmddmm/xxx.git
4.本地代码 add & commit
5.先拉取远程代码(如果没有readme文件则不需要此步骤)
git pull origin master
6.再push并追踪master分支
git push -u origin master
-------------------------------------------------
-------------------------------------------------
-- 摘樱桃多个(直接commit枚举,空格隔开)
-- 切换到需要这些commit的分支,从有这些commit的分支中找到commit编号(commitA commitB)
git cherry-pick commitA commitB
转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错
-- 不包含A
git cherry-pick A..B
-- 包含A
git cherry-pick A^..B
-------------------------------------------------
参考:
#git的使用
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
#git - 简明指南
http://rogerdudler.github.io/git-guide/index.zh.html
#常用 Git 命令清单
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
#git cherry-pick 教程
http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html