基础的git命令
1 创建(初始化)工作目录git init :对工作目录进行修改
2 git add ./ : 代表以下两条命令,将修改的文件生成的git同步到git数据库(版本区)然后再到暂存区,然后将文件状态由未跟踪标记为已跟踪
3 git commit -m "注释内容“:代表以下两条命令
总结:由2,3我们可知:执行git add 生成的哈希对象首先传送到版本库,再由版本库回传到暂存区,最后在暂存区通过git commit 命令生成tree对象后将tree对象提交到版本库中
4 git status查看git目录文件状态
Untracked files:说明有文件还处于未跟踪状态,通过git add命令使其处于已跟踪状态
Changes to be committed:文件处于被跟踪未修改状态,但还没有提交,需要执行git commit命令
On branch master
nothing to commit, working directory clean //出现这种提示,这说明你现在的工作目录相当干净,全部的文件都已被提交
Changes not staged for commit: //文件处于已跟踪状态,但中途被修改,使得文件变为未修改
5 git diff:查看哪些已修改的文件还未暂存(此类文件在命令行中是红色) ,加上-cached可知有哪些已暂存,的准备下次提交,加上–stage可以查看哪些被修改的以及暂存了的还没有提交
6 git log --oneline:查看日志记录即提交的历史记录
7 git branch分支操作:为你创建了一个可以移动的新的指针。 比如创建一个 testing 分支git branch testing,这会在当前所在的提交对象上创建一个指针,但并不会自动切换到新分支中去。也就是HEAD头指针依然指向原来的旧分支。同理,再次提交,分支移动的是HEAD指针所指的分支即旧分支移动
git branch:查看本地所有分支
git branch 分支名:创建一个名为xxx的新分支
git branch -d 分支名
git branch -v 分支名:查看每个分支的最后一次提交
分支切换git checkout,也就是使HEAD指向我们指定的分支,切换分支意味着当前文件工作目录会回退到该分支最后一次提交的文件状态。所以在切换分支前一定要保证当前工作目录下所有文件都处于已被提交的状态,否则会出现各种各样问题。
总结:切换分支会有三个地方发生改动①暂存区②工作目录③HEAD指针
git checkout 分支名
注意:①如果是在全部文件已提交的基础上又新建了一个文件,此时再进行分支切换,切换成功后这个文件会会被保留,导致分支污染②如果是
git init // 初始化 在工作路径上创建主分支
git clone 地址 // 克隆远程仓库
git clone -b 分支名 地址 // 克隆分支的代码到本地
git status // 查看状态
git add a// 将a文件存入暂存区
git add./ // 将当前层级下的所有文件提交到暂存区(流程是先到版本库再到暂存区)
git add -p 文件名 // 一个文件分多次提交
git stash -u -k // 提交部分文件内容 到仓库 例如本地有3个文件 a b c 只想提交a b到远程仓库 git add a b 然后 git stash -u -k 再然后git commit -m "备注信息" 然后再push push之后 git stash pop 把之前放入堆栈的c拿出来 继续下一波操作
git commit -m "提交的备注信息" // 提交到版本库,若已经有若干文件放入版本库但并没有add到暂存区,再次提交也可以不用git add和git commit -m "备注信息" 这2步结合, 直接用git commit -am "备注信息" 即可!
存储密码凭证 设置别名 获取config信息以及配置
git config --list // 获取config信息
git config --global core.safecrlf false // 去掉git add 命令后 出现的一堆CR LF提示信息
其中CR是回车的意思 LF是换行
git config --global credential.helper wincred // 存储凭证 (可用于输入一次用户密码后,不再输入 有时我们已经用SSH key 绑定关联好了 但是每次git提交的时候 还是需要你输入用户名密码 在这个时候 敲入这个命令 将凭证存储起来 用户名密码就不需要再次输入了)
git config --global alias.ci commit // 将commit命令设置别名ci git commit命令将由git ci来代替
14.对比工作区,暂存区,仓库的差异
git diff // 查看变更 工作区与暂存区的差异比对
git diff --cached // 暂存区与提交版本的差异
git diff HEAD // 工作区与仓库中最后一次提交版本的差别
git diff 版本哈希值 版本哈希值 // 查看这2个版本哈希之间的区别
或者 git diff HEAD~数字 HEAD~数字
git tag tt HEAD~4 给倒数第5次提交打一个tag tag名字是tt
git diff tt 就是倒数第5个版本与第一个版本之间的差异
git diff --cached tt 暂存区与倒数第5个版本之间的比对
15.查看提交信息
git show HEAD // 查看最后一次提交修改的详细信息 也可以用git show 哈希值 查看对应的内容
git show HEAD^ // 查看倒数第二次的提交修改详细信息
git show HEAD^^ 或者git show HEAD~2 查看前2次变更
git show HEAD 或 git show 哈希值 或者git show tag(标签名) 都可以查看最近一次提交的详细信息
16 .查看信息
git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
// 获取git log里的树形详细信息 包括hasg 日期 提交信息 提交人等
git log --oneline //拉出所有提交信息 q是退出
git log -5 // 查看前5次的提交记录
git log --oneline -5 // 打印出的日志里面只有哈希值和修改的内容备注
git log 文件名 // 查看该文件的提交
git log --grep // 想过滤看到的内容 过滤日志
git log -n // 查看近期提交的n条信息内容
git log -p // 查看详细提交记录
17
git commit --amend -m "提交信息" // 回撤上一次提交并与本次工作区一起提交
git reset HEAD~2 --hard // 回撤2步
git reset --files // 从仓库回撤到暂存区
git reset HEAD // 回撤暂存区内容到工作目录
git reset HEAD --soft 回撤提交到暂存区
git reset HEAD --hard // 回撤提交 放弃变更 (慎用)
git reset HEAD^ // 回撤仓库最后一次提交
git reset --hard commitid // 回撤到该次提交id的位置 回撤后本地暂存区可能有内容 本地仓库有要同步的内容 此时 丢弃掉暂存区的内容 并且强制将本地的内容推送至远程仓库 执行下面的命令 git push -u -f origin 分支名 这样就可以完全回撤到提交id的位置
git reset --soft commitid // 回撤到该次提交id的位置 并将回撤内容保存在暂存区
git push -f -u origin 分支名 所有内容都回撤完了 将回撤后的操作强制推送到远程分支
git push origin/分支名 --force 强制将本地回撤后的操作 强制推送到远程分支
使用如下git 命令查看所有远程分支
git branch -r
查看远程和本地所有分支
git branch -a
查看本地分支
git branch
git branch -d test //删除分支test,如果分支上还有内容或者分支是无法删除的
git branch -D test //强制删除分支test
1、git branch test; //仅仅创建一个分支test(图中是testing),不会影响head指针,该分支默认指向当前的提交对象
我们在使用git -log --oneline查看当前状态,完全符合上图的分析
2 、git checkout test; //将head指向分支test,此时如果进行提交,那么效果图如下
再次查看分支状态,结果如下,符合上图推理
3、git checkout -b test 创建分支test并立刻将HEAD指向它,也就同时上面命令1和2的功能
注意:
4、git merge:分支合并
注意:应该是主分支master合并其它分支而不是master合并主分支