分布式 VCS
服务端和客户端都有完整的版本库
脱离服务端,客户端照样可以管理版本
安装 Git
命令终端查看 git 版本:git --version
最小配置
配置 user.name 和 user.email
|
添加配置
git config [--local | --global | --system] user.name 'Your name'
git config [--local | --global | --system] user.email 'Your email'
local:区域为本仓库
global: 当前用户的所有仓库
system: 本系统的所有用户
查看配置
git config --list [--local | --global | --system]
创建第一个仓库并配置 local 用户信息
建 Git 仓库场景:
1)把已有的项目代码纳入 Git 管理
cd 项目代码所在的文件夹
git init
2)新建的项目直接用 Git 管理
cd 某个文件夹
git init your_project
cd your_project
添加 local 用户配置
git config --local user.name 'Your name'
git config --local user.email 'Your email'
查看 local 配置
git config --list --local
文件操作
文件重命名 git mv test_1.txt test_2.txt
结合IDE 一起用;常用常新
git help [todo]
最全的git命令(详细)和对常见git操作流程讲解 - 掘金 (juejin.cn)
分支 | 本地 | 远程 | ||
代码 | 工作区 | 暂存区 | 版本库 | 远程仓库 |
一个分支上 的代码 | 写代码 | 代码 加入到 Git管理 | 代码提交 形成 记录 | 代码记录 同步到 共享代码库 |
版本变更历史
git log : 查看当前分支的 log
git log -n4
git log --oneline
git log -n4 --oneline
git log --all : 查看所有分支的 log
git log --graph : 图形 log
git log --oneline --all -n4 --graph
git branch -v :查看本地分支信息
工作区
放弃工作区修改
git checkout - <filepathname> (放弃单个文件修改)
git checkout . (放弃所有修改)
工作区-> 暂存区
.gitignore 忽略特定文件,支持通配符
*.a 表示忽略所有 .a 结尾的文件
!lib.a 表示lib.a除外
/TODO 表示仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ 表示忽略 build/目录下的所有文件,过滤整个build文件夹;
doc/*.txt 表示会忽略doc/notes.txt但不包括 doc/server/arch.txt
bin/: 表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 表示忽略根目录下的bin文件
/*.c: 表示忽略cat.c,不忽略 build/cat.c
debug/*.obj: 表示忽略debug/io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj
**/foo: 表示忽略/foo,a/foo,a/b/foo等
a/**/b: 表示忽略a/b, a/x/b,a/x/y/b等
!/bin/run.sh 表示不忽略bin目录下的run.sh文件
*.log: 表示忽略所有 .log 文件
config.php: 表示忽略当前路径的 config.php 文件
/mtk/ 表示过滤整个文件夹
*.zip 表示过滤所有.zip文件
/mtk/do.c 表示过滤某个具体文件
git add *
工作区<- 暂存区 取消暂存
git restore --staged <文件名> 取消暂存单个文件
git restore --staged <文件1> <文件2> ... 取消暂存多个文件
git restore --staged . 取消所有暂存文件
工作区<- 暂存区 丢弃修改
git reset HEAD <filepathname> (放弃单个文件修改)
git reset HEAD . (放弃所有修改)
暂存区
git stash save (隐藏暂存代码但不删除)
<- git stash list (暂存列表)
<- git stash apply (取消最近一次暂存)
<- git stash apply stash@{n} n ∈[0,n) (取消 第n+1次 暂存)
暂存区->版本库
git commit -m ['commit_message'] (提交到版本库)
暂存区->版本库 追加提交
git commit --amend -m ['commit_message'] (修改上次提交到版本库,push 前可操作)
暂存区<-版本库 取消版本
git reset --soft HEAD~n n ∈[1,n] (回退到前n次提交)
idea 可视化中 是 git undo commit
版本库->远程仓库
git push origin master (first push) (提交到远程仓库)
<-git push (not first push)
版本库->远程仓库 取消
git reset --soft HEAD~n n ∈[1,n] (回退到前n次提交) git push --force (取消提交到远程仓库)
<-git revert --soft HEAD~n n ∈[1,n] (回退到前n次提交 形成新提交) git push (提交到远程仓库)
<- git reset --hard HEAD@{n} n ∈[1,n] (取消 前n次的回退)
版本库<-远程仓库
git clone (first full get)
git pull (not first full get)
git merge (合并冲突代码)
删除远程仓库文件
git rm -r --cached <文件夹>
git commit -m 'delete xxx'
git push
本地分支->远程分支
git checkout -b [branch_name] (新建分支 并切到新分支)
git push origin [branch_name] (提交 本地分支 到 远程分支)
本地分支
git cherry-pick [commit] (选择一个 提交记录 合并 到 当前分支)
git branch -d [branch-name] (删除本地分支)
git branch -dr [remote/branch] (删除远程分支)
本地分支<-远程分支
git fetch (拉分支)