git 学习笔记
问题:上传txt文件中文为乱码,但是md文件html 文件都正常
解决:
尝试一:
进入git安装目录找到etc文件,按网上说的 etc\gitconfig文件未找到,etc\git-completion.bash文件也未找到,etc\inputrc到是有,不过还是放弃了此方案。
尝试二:
不使用window的文本编辑器,使用其他编辑器,例如notepad++,atom等,问题解决。
问题: git客户端ls显示文件列表为乱码,对话框头部中文显示问号
解决:git输入框右键-选择options-选择text-选择character set 中的utf-8,apply,save
笔记
初次配置
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
在工作目录中初始化新仓库
$ git init
从现有仓库克隆
$ git clone git://github.com/schacon/grit.git
如果想重命名clone的仓库
$ git clone git://github.com/schacon/grit.git mygrit
mygrit 就是本地仓库的名字
查看状态 git status
查看修改内容
git diff 此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用 git diff --cached
命令。(Git 1.6.1 及更高版本还允许使用 git diff --staged
,效果是相同的
忽略某些文件
$ cat .gitignore
*.[oa] *~
第一行告诉 Git 忽略所有以 .o
或 .a
结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~
)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。此外,你可能还需要忽略 log
,tmp
或者 pid
目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore
文件的习惯,以免将来误提交这类无用的文件。
文件 .gitignore
的格式规范如下:
- 所有空行或者以注释符号
#
开头的行都会被 Git 忽略。 - 可以使用标准的 glob 模式匹配。
- 匹配模式最后跟反斜杠(
/
)说明要忽略的是目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(
!
)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*
)匹配零个或多个任意字符;[abc]
匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?
)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9]
表示匹配所有 0 到 9 的数字)。
我们再看一个 .gitignore
文件的例子:
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt
**\
通配符从 Git 版本 1.8.2 以上已经可以使用。
提交更新 $ git commit
每次准备提交前,先用 git status
看下,是不是都已暂存起来了,然后再运行提交命令 git commit
: git commit -a 提交全部
删除 $ rm grit.gemspec
查看提交历史 $ git log
$ git log -p -2 我们常用 -p
选项展开显示每次提交的内容差异,用 -2
则仅显示最近的两次更新
$ git log -U1 --word-diff 单词层面的对比
$ git log --stat 仅显示简要的增改行数统计
撤消操作
修改最后一次提交$ git commit --amend
远程仓库的使用
关联一个远程库 git remote add origin git@server-name:path/repo-name.git
查看当前的远程库 git remote
添加远程仓库 git remote
从远程库抓取数据 git fetch [remote-name] eg:git fetch origin 或 git pull
推送数据到远程库 git push [remote-name] [branch-name] git push origin master
修改本地的远程库
在新版 Git 中可以用 git remote rename
命令修改某个远程仓库在本地的简称,比如想把 pb
改成 paul
,可以这么运行:
$ git remote rename pb paul
$ git remote
origin
paul
注意,对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master
分支现在成了 paul/master
。
碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行 git remote rm
命令
撤销
git checkout -- readme.txt
- 把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
- 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
- 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
- 总之,就是让这个文件回到最近一次git commit或git add时的状态
git reset HEAD file git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
分支