git 学习笔记

问题:上传txt文件中文为乱码,但是md文件html 文件都正常

解决:

尝试一:

进入git安装目录找到etc文件,按网上说的 etcgitconfig文件未找到,etcgit-completion.bash文件也未找到,etcinputrc到是有,不过还是放弃了此方案。

尝试二:

不使用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)都用这样的文件名保存副本。此外,你可能还需要忽略 logtmp 或者 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时,表示最新的版本。

分支

查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
git log --graph命令可以看到分支合并图。 退出时按q键退出
原文地址:https://www.cnblogs.com/wuyuchao/p/8269603.html