全过程(顺序执行一遍印象更深哦)
-
初始化项目或拷贝项目
git init
当前目录初始化git init <dir>
指定文件目录初始化git clone <repo>
拷贝一个仓库项目git clone <repo> <directory>
拷贝一个仓库项目到本地指定目录
-
配置仓库
git config -e
针对当前仓库,-e等同于–edit,使用vim编辑git config -e --global
针对系统上所有仓库- 提交代码前一定要配置用户名和邮箱
-
工作区 ↔ \leftrightarrow ↔暂存区
git status
查看更改信息git diff
比较暂存区和工作区文件不同git add .
添加到暂存区git mv <file_a> <file_b>
移动或重命名暂存区文件git rm --cached <file>
将暂存区文件删除,不影响本地git checkout .
或git checkout -- <file>
或git restore --staged <file>
将暂存区文件替换工作区文件
-
暂存区 ↔ \leftrightarrow ↔本地仓库
git commit -m <msg>
将暂存区提交到本地仓库git reset --soft <commit_id>
回退版本到暂存区,工作区不受影响git log
查看提交信息- –oneline 简洁版本
- –graph 图示表示
-
工作区 ← \leftarrow ←本地仓库
git reset --hard
恢复上一个状态,所有提交的文件不存在(慎用)git checkout HEAD .
或git checkout HEAD <file>
用本地仓库的文件替换工作区和暂存区的文件- 上面两个的不同是:reset是恢复状态,git-commit的新提交丢失;checkout是替换文件,git-commit的新提交不会丢失
-
本地仓库 ↔ \leftrightarrow ↔远程仓库
git clone <git_url>
克隆到本地仓库git fetch
从远程获取代码库(rebase到其它分支前必须步骤)git merge
执行完fetch后需要从远程仓库提取数据并尝试合并到当前分支git merge [alias]/[branch]
git push
上传远程代码并合并git pull
下载远程代码并合并(等价于git fetch + git merge
)
-
工作区 ← \leftarrow ←远程仓库
git pull
拉取到本地
git branch 分支管理
git branch <name>
创建分支git branch -d <name>
删除分支git checkout <name>
切换分支git checkout -b <name>
创建新分支并切换到新分支git merge
合并分支,解决完冲突后,使用git add
表示冲突已经解决- 切换分支的时候,git会用该分支的最后提交的快照替换工作目录的内容,所以多个分支不需要多个目录
git remote 远程仓库
- 先在github上创建一个仓库
git remote add origin git@xxx.git
推送到远程仓库- 当连接不同远程仓库的时候,比如github和gitee,就使用
git remote add github xxx
和git remote add gitee xxx
来区分远程
- 当连接不同远程仓库的时候,比如github和gitee,就使用
git push -u [alias] [branch]
推送到alias远程仓库上的branch分支git remote
查看远程仓库git remote -v
查看远程仓库的具体信息
git tag 标签:重要阶段
git tag -a v1.0
创建一个v1.0标签, -a 表示带注解git tag -a v1.0 <commit_id>
为某个提交追加标签git log --decorate
查看标签
git log/blame 历史提交记录
git log
查看历史提交记录- –oneline 简洁版本
- –author=xxx 指定用户
- –reverse 逆向
- –before={} --after={} 时间
git blame <file>
文件历史修改记录
git stash 保存更改
git stash
将当前工作区和暂存区文件进行保存git stash apply <stash@{idx}>
应用保存的文件,这时暂存区的文件已经与工作区的文件合并- 默认应用的是stash@{0}
git stash pop
将stash@{0}的文件提交到工作区,并且将第0帧删除git stash show -v <stash@{idx}>
查看保存的内容,-v指查看详细更改- 默认是stash@{0}
git reset & revert 版本回退
- 现在在哪,HEAD就指向哪
git reset --hard HEAD~1
回退一个版本,重置暂存区和工作区- –hard 全部修改
- –soft 指修改版本库,将撤销点之后的修改都回退到暂存区
git revert <commit_id>
撤销某次提交,会产生一次revert记录
git cherry-pick 摘取提交
git merge
是合并分支,使用另一分支的所有提交;git cherry-pick
是摘取分支,选取自己需要的提交git cherry-pick <commit_id>
将commit_id的提交应用到当前分支git cherry-pick A..B
转移从A到B的多个提交(不包含A)git cherry-pick A^..B
转移从A到B的多个提交(包含A)- 代码冲突
- 解决代码冲突后,使用
git add
将文件加入暂存区,然后继续执行git cherry-pick --continue
git cherry-pick --abort
发生冲突后,放弃合并,回到之前的样子git cherry-pick --quit
发生冲突后,放弃合并,不回到之前的样子
- 解决代码冲突后,使用
命令补全
- 将git安装包的补全脚本复制到根目录:cp xxx/contrib/completion/git-completion.bash ~/.git-completion.bash
- souce生效
- 测试成功