Git总结
git使用指南
无论是运行在哪个系统上,git指令都是基于linux指令的。
git常用指令
git checkout — readme.txt
命令 git checkout —readme.txt 意思就是,把readme.txt文件在工作区做的修改全部撤销,这里有2种情况,如下:
1.readme.txt自动修改后,还没有放到暂存区,使用指令撤销修改就回到和版本库一模一样的状态。
2.另外一种是readme.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。
可以看到它和上条指令的区别,上调指令强行使工作区回到上一次commit的状态,而这条指令则是仅仅撤销工作区的内容,暂存区就更改不了
指令中的中的 — 很重要,如果没有 — 的话,那么命令变成创建分支了。
rm readme.txt
该指令会删除readme.txt,不论readme.txt是否添加到暂存区。只要在文件夹中就可以删。删后要进行两个操作:1彻底删除,2将其恢复。注意:删除这个时间是发生在工作区的,如果我想彻底从版本库中删掉了此文件的话,可以再执行add,commit命令提交掉。只要没有commit之前,如果我想在版本库中恢复此文件如何操作呢?可以使用如下命令 git checkout — readme.txt
新建dev分支,并将head指针移动到该分支上:
git checkout -b dev
这行指令相当于两条指令:git branch dev 查看并创造分支与 git checkout dev切换分支
测试能不能连接到远程仓库:
ssh -T git@github.com
git 查看当前git用户的用户名与邮箱
git config —global —list
查看当前本地分支和远程分支的关联情况:
git branch -vv
查看远程仓库的地址:
git remote -v
git查看当前树的结构:
gitk —all
观察所有分支构成的git树情况。
gitk
只查看当前的分支的
查看提交记录,并且提交记录中会记录下 本地仓库中标记的远程分支 和 本地当前commit的提交分支,图中本地分支领先远程仓库三个版本
git log —all 查看所有分支的提交记录
git log -
git log —since=
当一条分支上完成git add .后,没有push到远端,而是选择切换到另一条分支上,这时就会提示你stash一下或者commit一下,而且commit的过程中如果没加-m,会报错如下图:
git 合并
合并指令
git merge
在哪个分支上(如dev)和并其他分支(master),head指向这两个节点融合后的新节点,合并后dev指针指向生成的新内容但master还指向合成前的自己!想让两个指针均指向最新生成的节点就要在master分支上git merge dev。若和并的过程中有手动修改,导致master与dev,dev与master merge的结果不一样,则两个分支的指针不会都在master分支上,依然分别在两个分支上。
合并冲突
用git status来查看冲突,直接打开冲突文件,查看冲突内容:
1 |
|
等线上下分别是两个分支的冲突内容,直接编辑该文件,删掉,保留得到目标文件,
git add . git commit就可以解决冲突了。
如果我不想合并了,该怎么办?
git merge —abort
前文中提到,如果执行git merge合并时发生冲突,则会进入合并的中间状态。合并的中间状态下将无法执行其他一些操作(如切换分支)。
如果不想继续合并,要先用git merge —abort命令退出。该命令会使你回到执行git merge 分支之前的状态
git回滚
git回滚(reset)方式
撤回命令:git reset HEAD^
可以看到,本地回滚成功,by 4commit变成了by 3commit,此时查看工作区,发现 被回滚版本 的内容还在工作区内,只不过从已提交状态变为了Modified状态(add .之前)。
但如果用:
git reset —hard HEAD^ 那么就不会撤回到 工作区修改 的状态,而是直接把工作区回退到上一次commit后的状态(上次commit->本次commit->工作区或暂存区被修改->reset指令),这是我们对reset指令期望的状态。这条指令执行后会让本地仓库中的head指针回退一次,同时清空暂存区、工作区中没有commit的全部内容。因此使用时一定要commit后再使用这条指令。
git push -f origin master
本地回滚之后,强制push到远端,实现远端回滚,但要强制push,这样做对远端来说很危险!
git回滚(reflog加jump方式)
git reflog
该指令可以显示你的全部操作记录,每个操作记录都有唯一的一条操作码,比如你发现reset错了,想撤销所有reset回到reset之前的版本,只需要这样做:
第一条指令跳到c8e2be9,这条指令是所有撤回操作前的最后一条指令,因此reset这条指令会回到这条指令执行结束后的状态,即从caogap跳转到master之后。此时查看status里都是干净的。
git回滚(revert方式)
文件在暂存区与工作区的回滚
通过 git checkout — 文件名 命令可以撤销文件在工作区的修改。
通过 git reset 文件名 命令可以撤销指定文件的 git add 操作,将这个文件取出暂存区,然后把它放到工作区中。