git学习笔记

git资源

我的git 理解

Git的作者就是Linux开源OS的作者:Linus Benedict Torvalds),大神就是牛!!!

Git一种版本管理软件,Git管理的是每一次的提交(相当于操作的多出的binary),可以把Git的管理想像成维护一个树结构,每一个结点是就是一个commit,有一个buffer区来存下add操作.

我们的操作就是在和个结点和结点指针之间移动,commit 增加一个结点并移动相对应的指针,branch 分出一个分支或移动分支指针,checkout 切换分支或移动HEAD指针
merge 合并两个branch(当然是从分支指针开始merge),

git命令学习

命令 作用
git commit 提交增量,产生一个新的结点 [1]
git branch 创建或切换到已有分支
git merge 合并,会把两不同的结点 并为一个孩子,也就是包含所有修改
git rebase 取一系列commit点,copy,在别的dst放下,能到列线性的history
git rebase
HAED 指向当前commit点的指针,最近一次提交记录
git checkout 移动HEAD 到dst,HEAD^^,HEAD~1
git branch -f 强行移到分支到某个点
HEAD^,HEAD~1,branch^,branch~1 祖先结点
git reset HEAD^ 把当前分支记录退回到某个点
git revert HEAD 回退,眀会重新生成一个commit
git cherry-pick 复制commit到当前HEAD下面
git rebase -i HEAD~4 –abvoeAll 会有一个UI来手动选择
git commit –amend 可以使用 git commit –amend 修改上一次的提交信息。
git tags 见下面
git describe 显示离HEAD最近的tag
git checkout HEAD^2 多个父亲时,选第二个父亲
git fetch 下载远程分支
git pull 下载并merge
git pull -rebase 将远端的新提交fetch来,本地rebase到o/master上

git cherry-pick origin/master <1> <2> <3> 手动更新orgin/master
git rebase origin/master
git merge origin/master

remotes track

  1. 远端分支分出一个branch
    git checkout -b totallyNotMaster origin/master
    2.
    git checkout -u origin/master totallyNotMaster

创建并切换到一个新branch new_br
git checkout -b [src_br]

Git 手动建立tracking
更新现在分支track remote
git branch –set-upstreamto=origin/

把本地分支 push 到一个新的remote 并track
git push -u origin :

创建一个运程分支一样名字并track 切换
git checkout –track origin/

git reset –hard HEAD^

git push 参数
git push
git push origin :
如果不存在,那就会在远程程创建一个new branch,如果为空 会删除远程的分支
git push origin :
git push orgin : 删除一个本地分支
git push orgin : 删除运程分支

git fetch

git tag : 永远指向某个特定的commit,有新的commit里,
git checkout 到tagname的点
http://blog.csdn.net/wangjia55/article/details/8793577

git describe ref 是一个位置commit

git revert :回退某次提交,并重新提交,相当于代码恢复修改前,也就说revert也是一个commit,只是比较特殊,会修改某些操作
git reset :回退到某次提交,同时回退修改log,但是修改内容回退到本地local buffer,由用户确定是不是checkout丢弃

gitk
gitk –all 用GUI看全部的branch
git log
git log –pretty=oneline
git log –graphic

git 处理冲突

git 使用原则

[1] : 如果我们

git commit -m "3"
git checkout HEAD^
git commit -m "4"
git branch -f master HEAD

上面的操作很有意思
我们强制的HEAD指向上一个结点,然后创建一个新的结点,移动master

没有分支名,也没有HEAD指针的分支,会被删除(也许仅仅是看不到)
因为分支名也是指针,没有指针指向的分支会不见!?
上面说的可能不太对?因使用gitk 和 git log 都看不到,但是使用Git gui 可以看到前三条命令的history!! 难受

乱码解决

在.gitconfig文件中修改或添加如下配置:
[core]
quotepath = false
作用:没有这一条,git status输出中文会显示为UNICODE编码。

git 删除运程文件夹

git rm -r -n
-n 只会显示会删除哪些文件,但不会删除

git rm -r –cached
删除远程文件,但不会删除本地

在gitignore 上添加 忽略的文件

最后

本文比较乱,因为git的学习是那种一边查一边的方法,本文会不断完善.