git-持续更新
Git 本地数据管理,大概可以分为三个区:
- 工作区(Working Directory):是可以直接编辑的地方。
- 暂存区(Stage/Index):数据暂时存放的区域。
- 版本库(commit History):存放已经提交的数据。
(从别人那粘贴过来的图)
一、start a working area(启动工作区)
1、git clone
/* 将远程仓库复制到本地 */ git clone https://github.com/tianqixin/runoob-git-test
2、git init
/* 初始化这个目录为git仓库,将这个目录变成git可以管理的目录 */ git init
二、work on the current change(处理当前更改)
1、git add
/* 将当前目录中的所有新文件添加到本地暂存区 */ git add .
/* 将被修改和被删除的文件提交到暂存区,不包括新文件 */
git add -u
/* 提交所有变化 */
git add -A
2、git mv
/* git mv 可以用来改名或移动文件 */ /* 将文件移动到文件夹 */ git mv text.txt mydir
3、git restore
/* 从暂存区撤销一个文件,暂存区中就没有myfile文件了 */ git add myfile git restore --staged myfile /* 从暂存区撤销对一个文件的修改 ,暂存区中myfile文件恢复到上一次add前的状态*/ git add myfile git restore myfile
4、git rm
/* 删除未修改的工作区和暂存区文件 */ git rm myfile /* 强制删除已修改的工作区和暂存区文件 */ git rm -f myfile /* 删除暂存区文件,保留工作区文件 */ git rm --cached myfile
三、examine the history and state(检查历史记录和状态)
1、git bisect(使用二分搜索算法来查找提交历史中的哪一次提交引入了错误)
1、git bisect start [最近的出错的commitid] [较远的正确的commitid] 2、测试相应的功能 3、git bisect good 标记正确 4、直到出现问题则 标记错误 git bisect bad 5、提示的commitid就是导致问题的那次提交
2、git diff(比较文件之间的差异)
/* 比较工作区和暂存区的两个file之间的差异 */ git diff myfile /* 显示暂存区中两次提交之间的差异 */ git diff [first-branch] [second-branch] /* 显示工作区与暂存区某个版本之间的差异 */ git diff [branch] /* 显示暂存区当前版本与某个版本之间的差异 */ git diff --cached [branch] /* 导出上一次提交和这一次提交差异的补丁 */ git diff HEAD~ HEAD > patch /* 导出工作区与暂存区差异的补丁 */ git diff > patch
/* 校验补丁是否可以使用 */
git apply --check patch
/* 打补丁 */
git apply patch
3、git grep(多文件查找)
/* 查找仓库中包含字符串“aws”的内容 */ git grep -n "aws"
4、git log(列出历世提交记录)
5、git show(显示一个或多个对象)
git log /* 显示提交详情 */ git show [commitID]
6.、git status(查看文件状态)
/* 查看文件状态 -s 精简输出 */ git status -s 第一列字符表示版本库与暂存区之间的比较状态。 第二列字符表示暂存区与工作区之间的比较状态。 ' ' (空格)表示文件未发生更改 M 表示文件发生改动。 A 表示新增文件。 D 表示删除文件。 R 表示重命名。 C 表示复制。 U 表示更新但未合并。 ? 表示未跟踪文件。 ! 表示忽略文件。 未跟踪和忽略文件会显示相同的两列,如 ??。
四、grow, mark and tweak your common history(创建、标志、调整您的共同历史分支)
1、git branch(创建分支、删除分支、查看本地分支、查看远程分支)
/* 查看本地分支 */ git branch /* 查看本地分支+上次提交的信息+本地和远程分支的关系+远程分支 */ git branch -a -vv /* 只查看远程分支 */ git branch -r /* 删除本地分支 */ git branch -d [branchName] /* 创建本地分支 */ git branch [branchName]
2、git commit(将暂存区中内容添加到本地仓库中)
/* 提交暂存区的指定文件到仓库区 */ git commit [file1] [file2] -m [message] /* 将git add 命令添加到git commit命令中,直接从工作区将代码提交到仓库中*/ git commit -a git commit -am [message]
3、git merge(将branch出的子分支合并到父分支上)
/* 切换到父分支 */ git checkout [branchFather] /* 合并分支 */ git merge [branchSon] /* 删除子分支 */ git branch -d [branchSon]
4、git rebase(变基分支合并)
/* feature分支是从master上拉出来的, * 现在feature把master上的新改动的版本作为base*/ git checkout feature git rebase master
5、git reset(回退版本)
/* 三个区整体回退版本到a2fb17版本 */ git reset --hard a2fb17 /* HEAD代表当前版本HEAD^1和HEAD~1代表上一个版本*/ git reset --hard HEAD^1 git reset --hard HEAD~1
6、git switch(创建和切换分支)
/* 创建分支 */ git switch [name] /* 根据一个人commit创建一个分支 */ git switch [name] [commit] /* 根据一个tag创建一个分支 */ git switch [name] [tag] /* 在本地创建一个与远程关联的同名分支 (拉取远程分支并且关联)*/ git switch [name] /* 切换分支 */ git switch [name] /* 切换到上一个分支 */ git switch -
7、git tag(标签,是一个指向某个commit的指针)
1、基于本地分支的commit,可以执行 git tag <tagName> 创建本地tag 2、再执行 git push origin <tagName> 推送到远程仓库 3、若存在多个未推送的本地标签,可以执行 git push origin --tags 一次性推送所有标签
/* 查看本地所有tag */ git tag git tag -l /* 查看远程所有tag */ git ls-remote --tags origin /* 查看tag内容 */ git show [tagName] /* 删除本地tag */ git tag -d [tagName] /* 删除远程tag */ git push origin :refs/tags/<tagName> /* 检出指定tar对应的分支 */ git checkout -b <branchName> <tagName>
五、collaborate (协作相关)
1、git fetch(从另一个存储库下载对象和引用,从版本库中拉取分支到暂存区)
/* 取回远程主机origin 下的master分支 */ git fetch origin master
/* 合并到当前分支 */
git merge FETCH_HEAD
2、git pull (从远程版本库拉取分支到工作区)
/* 拉取远程分支与本地分支合并 */ git pull <远程主机名> <远程分支名>:<本地分支名> /* 若合并分支是当前分支则可以省略分号 */ git pull <远程主机名> <远程分支名>
3、git push(将本地分支推送到远程分支)
/* 推送本地分支 */ git push <远程主机名> <本地分支名>:<远程分支名> /* 若远程、本地分支名相同可省略冒号 */ git push <远程主机名> <本地分支名> /* 强制推送 */ git push --force <远程主机名> <本地分支名> /* 删除远程分支 */ git push --delete <远程主机名> <本地分支名>