HEAD Index WorkingDirectory
image.png- HEAD 是当前分支引用的指针,它总是指向该分支上的最后一次提交。 这表示 HEAD 将是下一次提交的父结点。 通常,理解 HEAD 的最简方式,就是将它看做 你的上一次提交(commit)的快照
PS E:\WORK_NEW\vue2.x\gittest> git ls-tree -r HEAD
100644 blob a64b76583d9d91bf0f0b1a3bb2628844e63eef44 .gitignore
100644 blob d0d0f441d291bda4539b64155ded6f20f6fb2c79 5.md
100644 blob a163ed84ffb6d2348ada360ad26028aea7367418 a.txt
100644 blob 5115df1b33a93a3f343f852c484d1b46d7512d8d b.txt
100644 blob e676e9a441c35e82895d4e18269d6e9cb1473940 c.txt
100644 blob a7d6bc7f3459cce4da7266901a5b21b06de654f1 readme.md
- Index 索引是你的 预期的下一次提交。 我们也会将这个概念引用为 Git 的 “暂存区域”
PS E:\WORK_NEW\vue2.x\gittest> git ls-files -s
100644 a64b76583d9d91bf0f0b1a3bb2628844e63eef44 0 .gitignore
100644 4f29da8137b20f4d858a6d8d79f3d5a4583ce75d 0 5.md
100644 a163ed84ffb6d2348ada360ad26028aea7367418 0 a.txt
100644 5115df1b33a93a3f343f852c484d1b46d7512d8d 0 b.txt
100644 e676e9a441c35e82895d4e18269d6e9cb1473940 0 c.txt
100644 dfbd05cf013584f3b5e9e60d07c17b831011f472 0 new.txt
100644 a7d6bc7f3459cce4da7266901a5b21b06de654f1 0 readme.md
- WorkingDirectory 工作目录。 另外两棵树以一种高效但并不直观的方式,将它们的内容存储在 .git 文件夹中。 工作目录会将它们解包为实际的文件以便编辑。
git 工作流程:
image.png
1.git config
配置用户名和邮件地址
$ git config --global user.name yourname
$ git config --global user.email youremail
打印全部配置信息
$ git config --list
打印某一项配置 `git configt <key>`
$ git config user.name
别名
PS E:\WORK_NEW\vue2.x\gittest> git config --global alias.last 'log -1 HEAD'
PS E:\WORK_NEW\vue2.x\gittest> git last
commit 69631bd28e95572ad44235169f406983aff64fc5 (HEAD -> master)
Author: dongwudi <550293874@qq.com>
Date: Mon May 6 10:48:16 2019 +0800
b
PS E:\WORK_NEW\vue2.x\gittest>
2.获取与创建项目
-
git init
将一个目录转变成一个 Git 仓库 git clone
git clone
等价于
mkdir newdirname
cd newdirname
git init
git romote add origin <URL>
git fetch origin
git checkout master
3.快照基础
git add
git add 命令将内容从工作目录添加到暂存区(或称为索引(index)区),以备下次提交。
添加单个文件
git add <filename>
添加当前目录下所有文件
git add .
暂存所有的文件,包括新增加的、修改的和删除的文件
git add -A
git add -u
暂存修改的和删除的文件,不包括新增加的文件
标记冲突已解决
PS E:\WORK_NEW\vue2.x\gittest> git checkout master
Switched to branch 'master'
PS E:\WORK_NEW\vue2.x\gittest> git merge test1
Auto-merging readme.md
CONFLICT (content): Merge conflict in readme.md
Automatic merge failed; fix conflicts and then commit the result.
PS E:\WORK_NEW\vue2.x\gittest> git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed:
new file: 5.md
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: readme.md
PS E:\WORK_NEW\vue2.x\gittest> git add .\readme.md
PS E:\WORK_NEW\vue2.x\gittest> git status
On branch master
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
new file: 5.md
modified: readme.md
交互式暂存
PS E:\WORK_NEW\vue2.x\gittest> git add -i
staged unstaged path
1: +37/-0 nothing 5.md
2: +1/-1 nothing readme.md
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 7
Bye.
git status
git status 命令将为你展示工作区及暂存区域中不同状态的文件
git status
PS E:\WORK_NEW\vue2.x\gittest> git status
On branch master
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
new file: 5.md
modified: readme.md
git status -s 或者 --short 紧凑的格式输出
PS E:\WORK_NEW\vue2.x\gittest> git status -s
A 5.md
M readme.md
git diff
命令可以查看你工作环境与你的暂存区的差异(git diff 默认的做法),你暂存区域与你最后提交之间的差异(git diff --staged),或者比较两个提交记录的差异(git diff master branchB)
git diff 比较的是工作目录中当前文件和暂存区域快照之间的差异, 也就是修改之后还没有暂存起来的变化内容
PS E:\WORK_NEW\vue2.x\gittest> git diff
diff --git a/b.txt b/b.txt
index f54aeea..5115df1 100644
--- a/b.txt
+++ b/b.txt
@@ -1 +1 @@
-this is b modefied 3
+this is b modefied 4
git diff --staged 暂存区域与你最后提交之间的差异
git diff <commit 1> <commit 2> 比较两次 commit 之间的差异
git diff <branch1> <branch2> 两个 branch 之间比较
git difftool
git difftool --tool-help 命令来看你的系统支持哪些 Git Diff 插件
git difftool --tool=<tool>
git commit
git commit -m "your commit desc"
git commit -am "your commit desc" 自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add
git commit --amend
这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息
文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息
如果是提交后发现忘记暂存某些需要的修改内容,则可以:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
git reset
git reset 命令主要用来根据你传递给动作的参数来执行撤销操作。 它可以移动 HEAD 指针并且可选的改变 index 或者暂存区,如果你使用 --hard 参数的话你甚至可以改变工作区。
取消暂存<filename>文件
PS E:\WORK_NEW\vue2.x\gittest> git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: 5.md
new file: new.txt
PS E:\WORK_NEW\vue2.x\gittest> git reset HEAD new.txt
PS E:\WORK_NEW\vue2.x\gittest> git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: 5.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
new.txt
git reset <commit SHA> --soft 移动HEAD分支指向,即commit
git reset <commit SHA> --hard 重置所有文件到未修改状态
git reset <commit SHA> 移动commit,以及暂存区修改至相同内容
git reset <commit SHA> <filename> 指定一个提交来拉取该文件的对应版本
git rm
用来从工作区,或者暂存区移除文件的命令
git rm <filename> 把文件从版本库,工作区中删除,不会再追踪到
git rm <filename> -f 把修改过或新添加并且放到暂存区的文件删除
git rm --cached <filename> 把文件从git仓库中删除,工作区保留
git mv
git mv old_filename new_filename 重命名文件
git clean
git clean -f -d 移除工作目录中所有未追踪的文件以及空的子目录
4.分支与合并
git branch
git branch 列出本地所有分支,当前分支前有*号
git branch <branchname> 创建一个可以移动的新的指针,即新的分支
git branch -v 查看每一个分支的最后一次提交
git branch -r 远程分支列表
git branch -a 显示所有分支,包括本地和远程
git branch -vv 查看设置的所有跟踪分支
git branch --merged 查看哪些分支已经合并到当前分支
git branch --no-merged 尚未合并到当前分支的分支
git branch -d <branchname> 删除分支
git checkout
git checkout -- <filename> 还原成上次提交时的样子,危险的命令
git checkout - 切换到上一个 branch
git checkout --track <romotename/branchname> 远程跟踪分支,并且切换到branchname
git checkout branchname <romotename/branchname> 远程跟踪本地分支,并且切换到branchname
git checkout -b <branchnamenew> <romotename/branchname> 远程跟踪本地分支branchnamenew,并且切换到branchnamenew
git branch -u <romotename/branchname> 设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者修改正在跟踪的上游分支
git merge
git merge <branch> 合并分支
git mergetool
git mergetool --tool-help
-
git log
image.png
git log 的常用选项
git log --oneline --decorate 当前分支所指对象
git log --oneline --decorate --graph --all 项目分叉历史
git log --pretty=oneline 提交历史
git stash
想要切换分支,但是还不想要提交之前的工作;
储藏修改。 将新的储藏推送到栈上,运行 git stash 或 git stash save:
git stash 储藏修改
git stash list 查看储藏的东西
git stash apply 重新应用最新存储
git stash apply stash@{num} 指定应用的存储
git stash pop 恢复回到工作现场的同时把 stash 内容也删除
git stash clear 清空所有暂存区的 stash 纪录
git tag
git tag 查看所有标签
git show <tag-name> 查看标签信息
git checkout <tag-name> 切换 tag
git tag -l <tag-name> git tag -l 'v1.8.5*' 特定的模式查找标签(v1.8.5系列标签)
git tag <tag-name> 创建轻量标签
git tag -a <tag-name> -m 'desc' 创建附注标签
git tag -a <tag-name> <commit> 后期补标签
git tag -d <tag-name> 删除本地标签
git push <remote-name> <tag-name> 推送标签到远程
git push <remote-name> --tags 推送全部标签
git push origin :refs/tags/<tag-name> 删除一个远程标签,先从本地删除,再用该命令从远程删除
5.项目分享与更新
git fetch
与一个远程的仓库交互,并且将远程仓库中有但是在当前仓库的没有的所有信息拉取下来然后存储在你本地数据库中
git fetch [remote-name]
git pull
git fetch 和 git merge 命令的组合体
git push
git push <remote> <branch>
git remote
git remote 查看已经配置的远程仓库服务器
git remote -v 显示需要读写远程仓库的简写与其对应的 URL
git remote show <remote-name> 得到某一个远程仓库的更多信息
git remote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定一个你可以轻松引用的简写
6.检查与比较
git show
git show 查看最后一个 commit 的修改
git show <commit> 查看某一个commit
git shortlog
git shortlog 展示一个根据作者分组的提交记录的概括性信息
7.补丁
git rebase
git rabase <branch> 在本地 master 上进行变基操作
eg: git checkout test2
git rebase master
git checkout master
git merge test2
网友评论