git的学习
有关于git diff:
git的几个区分别是,工作区,暂存区,本地服务器,远程服务器。
使用git add 是工作区的提交到暂存区,使用git diff 也就是查看工作区于暂存区之间的差别,如果更改的文件已经提交到了暂存区那么,使用git diff 就无法查看在文件中做了那些修改。也就是工作区与暂存区文件之间的区别。这时候想要查看的话,就必须使用git diff --staged 来查看暂存区的文件,和本地服务器上提交的文件的区别
有关于git checkout:
如果是没有跟踪的文件,在切换分支的时候是没有影响的,但是如果是已经跟踪的文件做了修改之后,一定会造成影响的,必须要提交到本地服务器,因为在当前分之下所做的修改对其他分支而言是不可见的,因为切换到其他分支时,总会从本地服务器中加载数据,因此只要是追踪的文件在每个分支下所做的的修改都是,相互独立,互不干扰的。而没有被追踪的文件在每个分支下都是可见的。
- 更新某个分支某个文件
git checkout 指定分支 指定文件
有关于移除某个文件:
有时候不小心将某个文件,使用git add是某个文件被追踪了,这时候想要将这个文件从被追踪的清单之中移除
这个时候就要使用git rm,但是这个命令会将工作区的文件,暂存区,的文件全部都删除掉,这有时候并不是我们想要的。使用git rm --chched就不会产生这样的影响,只会删除暂存区的文件。
git blame
查看某一个文件的历史更改记录:git blame 文件 > 1.txt
有关于git的撤销:
使用git checkout只能将文件撤销到,上次提交到缓冲区里时的状态,因此他和git diff一样,只要git diff无发看到修改,git checkout撤销也无能为力。那么如果,一不小心将本不应该提交的文件提交到暂存区,了那么该怎么处理呢,只有先将文件从暂存区里较本次的提交撤出来,这样git diff就可以看到了,我们使用git checkout 也就可以进行撤销的操作了。使用git reset HEAD 文件,可以撤销本次,暂存区的撤销。因为git就是使用一个HEAD的指针不断随着提交而移动。
如果不小心将不该提交的文件提交到本地服务器上,或者是提交说明写错了。那么使用git commit --amend,这个命令是将暂存区的文件提交到本地服务器,因此使用这个命令之后,可以修改暂存区的文件或者是只写提交说明而不做其他的
修改,这样的话只算一次提交本次提交只是对上次的提交作了修改。
git 二次学习-分支模型
git 在切换分支时遇到的问题,在当前分支中对某一个文件做了修改,并且进行了提交之后。
-
在当前分支切换到另外一个分支时,在另外一个分支,对同一个文件做了修改之后如果不提交就无法在切换成原来的分支,因为没有提交的文件在不同的分支之间都是可见的,这样的话只要切换就会对文件造成修改,并且无法复原,因此肯定是切换不成功的。
2.在当前分支上新建新的分支,在切换的该分支,则不是在住分支上,而是在但前分支的基础上的一个分支。因此为了避免混乱,如果是在主分支的基础上做开发工作,就要在主分支上建立新的分支。要在某个分支的基础之上做开发工作,就要在该分支上建立新的分支,不能随便找地方新建。 -
自己对某一个文件进行操作并且提交之后,如何恢复到之前没有提交之前的状它呢?
git log 文件名 //找到自己要回退的哈稀值
git reset --hard id 文件名 //这样就可以回退到之前的状态 -
自己对某一个分支进行操作并且提交之后,如何恢复到之前没有提交之前的状它呢?
git log //找到自己要回退的哈稀值
git reset --hard id //这样就可以回退到之前的状态 -
自己对某一文件暂存之后如何撤销这个操作?
git reset 或者是 git reset HEAD -
删除某个git 库中的文件,通常比较少使用?
首先使用git rm某个文件,然后git commit 这个文件。
如果在git rm 之前又对该文件做了修改的话,就应该根据提示使用–cached保留本地文件或者是-f强制删除,必须在两个之间有个选择。 -
git打补丁,在某个分支下运行打补丁的命令。打补丁也许会和自己的代码冲突,要根据实际情况解决冲突,一般去掉被标记的上面部分的代码,因为上面的是旧的代码通常需要新的。然后git add . 。再git commit提交以下就可以了。如果想回退到之前的版本,只要git log然后git checkout 回退到自己想要的版本就可以了。
-
关于打补丁
每次要打补丁,或者是要拉代码下来的话。要先建立新的分支,repo start 分支名 .
或者是是使用 gb 分支名 然后 gc 分支名。新的分支是在repo start 的版本时是一样的。这样在这个干净的分支里工作就没有关系了。 -
重点关于git stash 的使用
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash apply 版本号。例:git stash apply stash@{1}这样就pop出对应栈帧的内容了,当多个分支都使用了git stash的时候就非常有用了。
git stash drop 版本号。git stash drop stash@{1}这样就可以删掉对应栈帧的内容,删掉多余的栈帧。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
关于Git Stash的详细解释,适用场合,这里做一个说明:
使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码 commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用’git stash’就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用’git stash apply’将以前一半的工作应用回来。也许有的人会说,那我可不可以多次将未提交的代码压入到栈中?答案是可以的。当你多次使用’git stash’命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑,'git stash list’命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号,例如使用’git stash apply stash@{1}'就可以将你指定版本号为stash@{1}的工作取出来,当你将所有的栈都应用回来的时候,可以使用’git stash clear’来将栈清空。
在这里顺便提下git format-patch -n , n是具体某个数字, 例如 ‘git format-patch -1’ 这时便会根据log生成一个对应的补丁,如果 ‘git format-patch -2’ 那么便会生成2个补丁,当然前提是你的log上有至少有两个记录。