git笔记
用gitbash进入类似命令行的窗口
用命令 cd e:/learngit 进入该目录,然后在此目录下初始化 git init, 于是该文件夹就成为了一个工作区,里面的.git文件就是版本库(repository)
在工作区中新建一个文件,比如XXX.txt文件
在txt中添加‘1111’文本,用 git add XXX.txt命令将XXX.txt添加到缓存中
git status查看状态显示change to be committed(改变已经缓存)
已经缓存的文件是无法用 git diff XXX.txt查看不同的,但可以用 git diff HEAD -- XXX.txt(注意-- 后的空格)
然后,用 git commit -m'解释说明' 提交文档
提交之后会显示insertions(插入),deletion(删除),如果在最后添加新行会先删除最后一行,再补充最后一行的文本和新行文本,于是就会显示2 insertions ,1 deletions;
如果是在原行添加内容则会显示 1 insertions ,1 deletions;如果只是简单的插入一个新行则会显示 1 insertion
这时 git status查看状态 显示nothing to commit working directory clean(没有东西提交,工作目录为空)
这时为txt添加一行,可以用 git diff比较不同
再用 git status查看状态 changes not staged for commit(改变没有缓存到提交)
modified:XXX.txt
no changes added to commit (也没有可以提交的改变)
好,现在将文件缓存并提交后
用 git log可查看提交日志,但显示的条目有限,所以用 git log --pretty=oneline更直观 按q可退出
用 cat XXX.txt可查看当前工作区文本内容
用 git reset --hard 版本号 可回到相应的版本或者用 gir reset --hard HEAD^ 可回到上一个版本,回到前一百个版本 gir reset --hard HEAD~100
用 git reflog(重新迫使) 可查看你的提交和回退日志,也就是命令日志,因此也能看到相应的版本号
git checkout -- XXX.txt 可以撤销修改,如果已经缓存再做修改,修改也只是在工作区,不会影响已经缓存的文档内容
git reset HEAD XXX.txt 会将文档回退到工作区的状态,如果文档在暂存区时作了修改,那这个修改也只是在工作区作出的,其实暂存区的文件只是一个副本而已,说是回退到工作区,其实不如说是删除该副本,比如文档文本为‘1’,缓存后再修改为‘12’,现在回退(也就是删除)那文档文本仍为‘12’
rm XXX.txt 可以删除工作区文档,但分支里的版本就跟工作区里的不一致了,也就是分支在工作区找不到对应的文件作比较,因此,你也需要把分支里的版本删除 git rm XXX.txt
???在master上更改后切换分支会报错:你的本地改变已经被改写,请先提交或stash(备份)后再切换,也就是说必须提交后才能切换,注意,这个时候即使缓存了也会报同样的错误,而在dev分支上修改再切换到master却可以,而且在dev分支上作的修改也会照样在master上呈现
git branch -d dev删除分支,如果你当前在dev分支上,你是无法删除dev分支的,需要切换到其他分支才能删除
如果在dev上作了修改。git stash 过后切换到master,修改master,stash后又切换到dev,会发现git stash list上{0}master {1}dev所以此时不能用git stash apply(不会删除stash list中的相应储存记录)或git stash pop(会删除list中的记录),应该用git stash apply @{1}
在dev和master的同一行修改了内容会引起冲突,比如dev ‘111’,master‘11111111’,虽然master只是在dev上增加了,但仍然冲突
如果在dev上创建了一个新分支conf,那么在远程任何分支上都可以创建conf ,在本地conf分支上push origin dev 则会把dev分支上的内容推送到远程dev上
git remote -v可查看当前分支在远程的情况
git remote show origin 可查看远程有哪些分支
获取远程分支 git fetch 此时查看分支列表没有显示刚获取的分支,需要切换到该分支下才行
删除远程分支 git push origin :dev 但是本地分支仍然存在,不会被影响
如果在远程创建了一个分支,而该分支和本地分支同名,当切换到该分支时会提示用 ‘git pull’更新本地分支,其实pull就相当于更新的功能
???克隆远程仓库时只能看到master分支,想在dev分支上开发需要 git checkout -b dev origin/dev
如果在远程的dev分支上修改,然后在本地conf分支上使用 git pull可以看到远程有哪些文件修改了,当切换到dev分支上时还需要再次git pull才可更新该分支
如果在工作区新建了一个文件,此时在dev分支上add并commit再push,那就只在远程dev上有该文件
git log可以查看在当前分支下的版本记录,如果该分支是在其他分支上创建的,那相应的记录也会复制过来
git tag v1.0可以在给该分支的最近一次提交打上标签,git tag v1.0 版本号 可以给相应版本打上标签,无论在哪一个分支上,用git reset --hard v1.0都可以使该分支下的文件回退到该版本
git tag 查看所有标签 git show v1.0查看标签信息
这里区分一下 git reset --hard v1.0(重新设置为硬盘里的v1.0版本) git checkout -- XXX.txt (切换到当前文本,也就是未被修改时的状态) git reset HEAD XXX.txt(重新设置为当前指针所指的版本,也就是缓存了的时候撤回工作区)什么时候- ,什么时候-- 如:-m,--hard
git branch --set-upstream-to=origin/dev
从pull过后,本地会多出一行
???在本地pull后再push,push成功后在远程发生冲突
删除操作也需要提交
B分支衍生于A分支的话,B分支会保存A分支的提交历史, git checkout --orphan dev创建一个无提交历史的干净的dev 分支
git rm -r --cached 文件夹名 //取消跟踪
git rm --cached 文件名
.gitignore /.json 忽略当前目录下的json .json忽略所有json文件 即使不忽略!myfile myfile下的json仍然被忽略,无论!myfile ,*json这两条语句前后
git ls-files 查看已经被跟踪的文件
git branch -m kill 重命名当前分支为kill
git checkout -f 强制撤销本地修改,对工作区和缓存区的修改都有效,对已经提交的修改无效
git revert HEAD 比如log里面有版本one和two,那执行此命令后为版本one two three,three是one的副本,意味撤销仓库的最新提交,改为上一版本
遇到 #please commit ...的情况:这是vim的 insert 模式,在首行键入提交信息后按ESC退出vim的编辑模式,然后键入 :wq, 注意:号,保存退出
git reset --hard origin/master 将本地的状态回退到和远程的一样