工作区[Working Directory]>暂存区[Stage]>仓库区[History]
获取仓库
-
克隆远程仓库到本地
git clone git@xxx.git
-
指定仓库分支克隆
git clone -b branch_name git@xxx.git
上传本地仓库到远程
-
新建本地仓库
mkdir git_test cd git_test git init touch README.md git add README.md git commit -m "first commit"
-
推送到远程
git remote add origin git@xxx.git git push -u origin "master"
查看提交
-
查看所有提交记录
git log
-
查看单次提交详情
git log commit_id
-
对比提交差异
git log -p -2 file_name -p:<==> --patch 显示每次提交引入的差异 -2:只显示最近两次提交 file_name:要查看的文件名
-
格式化查看提交列表
git log --oneline --decorate --oneline:以1行展示 --decorate:查看分支当前指向的对象
分支管理
-
新建分支
git checkout -b local_branch -b:切换到刚创建的分支 # 推送分支到远程 git push -u origin local_branch
-
查看分支
git branch 查看本地所有分支 -a:查看所有分支包括远程 -vv:查看分支追踪情况 -v:查看分支最后一次提交 --merged:查看哪些分支合并到了当前分支 --no-merged:查看哪些分支未合并到当前分支
-
合并分支
merge:[原理]将两个分支最近的快照和两者最近的共同祖先做三方合并,生成一个新的快照
# 将des分支合并到current分支 1.git checkout current_branch 2.git merge des_branch
rebase:[todo]
-
分支切换
# 切换到指定分支 git checkout branch # 切换到上一次分支 git checkout -
-
跟踪分支
# 创建时跟踪 git checkout -b local_branch origin/remote_branch # 推送时跟踪 方式1.git push -u origin remote_branch 方式2.git push --set-upstream origin remote_branch # 本地设置跟踪 git branch --set-upstream-to=origin/remote_branch
-
删除分支
# 删除远程分支 git push origin --delete remote_branch # 删除本地分支 git branch -d branch_name
标签管理
-
创建标签
# 轻量级标签 git tag tag_name # 附注标签(记录打标签人的详细信息) git tag -a tag_name -m "tag_info" 说明:附注标签必须输入-m指定标签信息,否则会提示输入
-
查看标签
# 查看所有标签 git tag # 模糊匹配标签 git tag -l "*1.8.3*" -l:模糊匹配 # 查看tag详情 git show tag_name
-
推送标签
# 支持同时推送多个标签 git push origin tag_name [tag_name2] # 推送本地所有tag git push origin --tags
-
删除标签
# 删除本地tag git tag -d tag_name # 附注标签(记录打标签人的详细信息) git tag -a tag_name -m "tag_info" 说明:附注标签必须输入-m指定标签信息,否则会提示输入
-
输出标签
# 像分支一样切换tag git checkout tag_name
贮藏与清理
-
贮藏修改内容
# 直接贮藏 git stash # 为贮藏添加注释 git stash save -u "xxx"
-
查看贮藏列表
# 查看贮藏列表 git stash list # 查看贮藏差异 git stash show -p # 查看当次贮藏 git stash show stash@{n}
-
应用贮藏
# 默认应用最近一次贮藏 git stash apply stash@{n}
-
删除贮藏
git stash remove stash@{n}
版本回退
-
工作区
# 撤销单个文件 git checkout filename # 撤销文件夹 git checkout 目录/* # 撤销所有文件修改 git checkout . # 清理所有未跟踪文件 git clean -f -d
-
暂存区
# 撤销单个文件 git checkout - filename # 撤销文件夹 git checkout - 目录/* # 撤销所有文件修改 git checkout - .
-
撤销本地仓库(commit)
git reset --mix:撤销git commit且撤销git add,不删除工作区代码修改 默认reset方式git reset --mix HEAD^ == git reset HEAD^ --soft:撤销git commit但不撤销git add,不删除工作区代码修改;此时git checkout回退暂存区->工作区失败->使用git restore --staged 文件名 --hard:撤销git commit且撤销git add,且删除工作区代码修改 恢复到上一次commit的记录
-
撤销远程仓库(push)
reset方式
1.git reset HEAD | commit_id 2.git push --force (使用强制push,因为此时本地落后远程)
revert方式
1.git revert HEAD | commit_id 2.git push
区别
- git reset是从分支中删除commit,回退后旧commit记录消失;reset跟的commit号为回退前的commit_id(索引从0开始)
- git revert回退后会产生新的commit,回退后旧commit记录仍存在;revert跟的commit号为当前要回退的commit_id(索引从1开始)
实用命令
-
cherry-pick:将连同commit_id将提交拷贝到当前分支
git cherry-pick commit_id [commit_id2] --continue:修改cherry-pick冲突后继续 --abort:放弃合并回到cherry-pick之前 --quit:退出cherry-pick但不回到操作之前
配置多个SSH Key
背景
当有多个git账号时,比如:
a. 一个gitee,用于公司内部的工作开发;
b. 一个github,用于自己进行一些开发活动;
解决方法
生成一个公司用的SSH-Key
$ ssh-keygen -t rsa -C ‘xxxxx@company.com’ -f ~/.ssh/gitee_id_rsa
生成一个github用的SSH-Key
$ ssh-keygen -t rsa -C ‘xxxxx@qq.com’ -f ~/.ssh/github_id_rsa
在 ~/.ssh 目录下新建一个config文件,添加如下内容(其中Host和HostName填写git服务器的域名,IdentityFile指定私钥的路径)
gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa
github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
4.用ssh命令分别测试
$ ssh -T git@gitee.com
$ ssh -T git@github.com
Gitee添加ssh密钥
1.头像>>>设置>>>SSH公钥
2.拷贝已生成的id_rsa.pub内容到ssh公钥处