git 中文件有三种状态:
ignore
tracked
untracked
文件有三个位置:
工作目录
暂存区
仓库中
push的是仓库中的代码,即使工作目录中的代码修改了但是没有add和commit,仓库中的代码也是不会变的,push的时候也不会受影响。
创建新分支,删除分支
创建并切换到新分支
- git branch branchname
git checkout branchname - git checkout -b newBranch
删除分支
- (本地)git branch -d branchname
- (远端)git push origin –delete branchname
添加文件到暂存区和取消添加
添加 git add . 或者 git add filename(文件名之间可以是空格隔开来添加多个文件) 或者 git add 文件夹
撤销添加:git reset HEAD filename
提交文件到仓库:
git commit -m “说明”
修改最新的提交
git commit –amend
暂存区中的文件覆盖工作目录中的文件
git checkout – filename
代码回滚:
git reset commit_id
撤销某次提交
git revert commit_id
将远端代码拉取到本地和某分支合并
git pull origin 远端分支:本地分支
将本地代码推送到远端和某分支合并
git push origin 本地分支:远端分支
将远端某分支拉取到本地
git fetch origin branchname
合并分支到当前分支
git rebase 分支名
git merge 分支名
查看文件状态
git status
查看提交日志
git log
想要切换分支但又不想commit当前分支的代码
git stash
git checkout 分支名 (接着是在当前分支的一些操作)
git checkout 原分支
git stash pop (原来的修改代码就回来了)
删除文件
- 如何从仓库中和工作目录中删除一个文件??
git rm 文件名 - 只从暂存区删除文件
git rm –cached 文件名: - git rm -r 文件夹/ :删除文件夹
查看工作目录相对索引区文件的修改??
git diff filename
通过手动的delete键在工作目录中删除文件
- 再使用一次 git rm 文件名
- 执行指令 git add -A .或者是git add -all .(注意一定要有一个“.”),就会将不存在的文件记录在文档库中,接着执行git commit ,就会从文档库删除这些文件。
总结:git revert 可以用在公共分支上,git reset 应该用在私有分支上。
合并代码的过程???
第一:有人发出合并请求
第二:有人对代码进行审查
第三:有人来执行合并操作
origin是什么意思??
git会自动把远程仓库的名字命为origin,使用git remote -v 可以看到origin指的地址是什么。
HEAD是什么??
可以看做是一个指针,始终指向当前分支,当前分支对应着最新一次提交的commit hash。
查看本地所有分支???
git branch -a
查看远程仓库所有分支??
git branch -r
新切一个分支????
git checkout -b newbranch
切换分支?
git checkout branch
将一个分支(一般是本地分支)合并到当前分支???
git rebase 分支名
怎么将远程仓库中的代码搞到本地来??
git clone
把一个分支的修改合并到当前分支
取回所有分支的更新:git fetch
取回指定分支的更新:git fetch origin 分支名 取回后就会在本地新建一个同名分支
git log可以看到什么??
谁在什么时间做了一次提交,对代码做出改动的说明是什么。
谁在什么时间对代码做了一次合并,合并了哪几次提交??
(如果有bug,那么让人进行修复之后切一个分支(checkout -b)做一次提交(commit),让人进行合并(merge)之后,其他人拉取(fetch)远端的指定分支,然后合并(rebase)到自己本地当前的分支)
push
把本地分支推送到远程主机的分支??
git push origin local:remote
可以省略远程分支名
git push origin local 将本地分支推送到与之存在追踪关系的分支(通常就是同名分支)
在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,
当前分支与远程分支存在追踪关系
git push origin
当前分支只有一个追踪分支
git push
pull
把远程分支取回本地并合并指定分支??
git pull origin 远程分支:本地分支
把远程分支取回本地并合并到当前分支??
git pull origin 远程分支
把远程和当前分支存在追踪关系的分支和当前分支进行合并
git pull
将指定分支合并到当前分支??
git merge branchname
查看所有的储藏列表??
git stash list
为什么要使用git stash??
当想要pull最新代码的时候会提示要先commit,这个时候如果不想commit,就可以执行
git stash
git pull
git stash pop
git stash 存储当前工作目录中的代码
git stash pop 应用最近一次存储的代码
如何提交一个文件??
git commit -m “描述信息”
将文件修改添加到索引??
git add filename
撤销对未放入索引区文件的修改?
git checkout filename
如何在别人的分支上面继续开发??
别人执行一次git commit
然后git fetch origin 分支名,然后git checkout 分支名,这样代码就和别人的代码一样了,可以在别人的基础上继续开发。
将工作目录中的所有变化提交到暂存区(包括修改和新加文件)?
git add .
–all参数全名 -A参数简写
git checkout – filename
用暂存区中filename文件来覆盖工作区中的filename文件。相当于取消自上次执行git add filename以来(如果执行过)的本地修改。
merge的原理??
rebase的原理??
1.版本1、版本3、版本6的 sha-1 值完全相同,这种情况表明没有冲突
2.版本3或6至少一个与版本1状态相同(指的是sha-1值相同或都不存在),这种情况可以自动合并。比如1中存在一个文件,在3中没有对该3.文件进行修改,而6中删除了这个文件,则以6为准就可以了
版本3或版本6都与版本1的状态不同,情况复杂一些,自动合并策略很难生效,需要手动解决。我们来看一下这种状态的定义。
将文件add到了暂存区中怎么取消操作??
git reset HEAD filename(其中filename可以写多个文件,文件之间用空格隔开,在add的时候也可以用这个方式)
提交之后reset操作??
git reset commit_id 会将仓库中的代码和暂存区中的代码一起回滚到那次提交之后的代码。工作目录中的代码则是自己操作过的代码。
在本次提交之后发现有些文件该提交却没有提交如何重新提交?
git add filename
git commit –amend(修订) (会弹出一个vim编辑器进行编辑提交的信息)
编辑完成后按esc然后输入
:wq就可以退出编辑。
回退到某个版本??
git reset 057d
向前回退几个版本?
git reset HESD~2/3/4··
撤销某次操作但是不影响此次操作前后的提交??
git revert commit_id/HEAD^/HEAD~1
执行commit操作后工作目录中的文件的名字颜色就会发生改变。如果只是add文件的颜色是不会发生改变的。
vim中在没有进入编辑模式之前,按下I,O就能进入编辑状态,区别是按下O会进入下一行编辑。按下esc则退出编辑状态。
网友评论