补充:
其实 git 默认对于文件名大小写是不敏感的,所以如果修改了某个文件的首字母大写,会发现git 并没有线上代码任何改动.
那么如何才能让 git 识别文件名大小写变化.
配置git 使其对文件名大小写敏感
git config core.ignorecase false
否则只能每次先删除再添加: git rm ..., git add .., git commit
从远程仓库拉代码时必须先给自己的账号配rsa,这样以ssh方式连接不需要每次都输用户名和密码;
另外第一次使用 Git 的 clone 或者 push 命令连接 GitHub 时,会得到一个警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.RSA key fingerprint is xx.xx.xx.xx.xx.Are you sure you want to continue connecting (yes/no)?
这是因为 Git 使用 SSH 连接,而 SSH 连接在第一次验证 GitHub 服务器的 Key 时,需要你确认 GitHub 的 Key 的指纹信息是否真的来自 GitHub 的服务器,输入 yes 回车即可。
Git与SVN区别:
SVN: 将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异;
Git: 把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时, 它主要对当时的全部文件制作一个快照并保存这个快照的索引, 绝大多数操作都只需要访问本地文件和资源;
Git三种状态:
1. 已提交(committed),表示数据已经安全的保存在本地数据库中;
2. 已修改(modified),表示修改了文件,但还没保存到数据库中;
3. 已暂存(staged),表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中;
Git三个工作区:
1. Git仓库,用来保存项目的元数据和对象数据库的地方;
2. 工作目录,对项目的某个版本独立提取出来的内容,这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改;
3. 暂存区域,是一个文件,保存了下次将提交的文件列表信息;
Git基本工作流程:
1. 在工作目录中修改文件。
2. 暂存文件,将文件的快照放入暂存区域。
3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
获取Git仓库:
1. 使用 Git 来对现有的项目进行管理,方法:安装git后,git init 'folerName',或在当前目录下新建一个git仓库: git init
2. 获得一份已经存在了的 Git 仓库的拷贝,方法:git clone 命令(不是"checkout",默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。 事实上,如果你的服务器的磁盘坏掉了,你通常可以使用任何一个克隆下来的用户端来重建服务器上的仓库,所有版本的数据仍在);
文件状态:
1. 已跟踪,指那些被纳入了版本控制的文件,在上一次快照中有它们的记录;
2. 未跟踪,它们既不存在于上次快照的记录中,也没有放入暂存区;
3. 命令$ git status可以查看文件状态(Untracked files: 未跟踪; Changes to be committed: 已暂存状态; Changes not staged for commit: 已跟踪文件的内容发生了变化,但还没有放到暂存区, 要暂存这次更新,需要运行 git add 命令);
新建一个文件后如何跟踪它:
使用命令 $ git add filename, 此时文件就是已暂存状态。 如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。
命令git add:
这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。 将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。
命令git commit:
这个命令不同于svn commit, git commit只是把快照提交到 local repository,only includes modifications to tracked files (those that have been added with git add),
修改—> git add—>修改—> git commit会怎么样:
在执行commit之前,先运行git status看看,会发现这个文件同时出现在暂存区和非暂存区。这是因为 Git 只不过暂存了你运行 git add 命令时的版本, 如果你在再次修改后直接提交,提交的版本是你最后一次运行 git add 命令时的那个版本,而不是你运行 git commit 时,在工作目录中的当前版本。 所以,运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来。
命令git status -s:
git status 命令的输出十分详细,但其用语有些繁琐。 如果你使用 git status -s 命令或 git status --short 命令,你将得到一种更为紧凑的格式输出。 运行 git status -s ,状态报告输出如下:
$ git status –s
M README MM Rakefile A lib/git.rb M lib/simplegit.rb ?? LICENSE.txt新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。 例如,上面的状态报告显示: README 文件在工作区被修改了但是还没有将修改后的文件放入暂存区, lib/simplegit.rb 文件被修改了并将修改后的文件放入了暂存区。 而 Rakefile 在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录。
提交更新:
git commit只提交暂存区的文件,Git 提供了一 个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤;
删除文件:
重命名文件:
Trouble:
In Eclipse , the red error:
Solved:
The error is about Eclipse is 32bit ,the windows OS is 64 bit. Empty the folder of ‘C:\Users\<user name>\.eclipse\org.eclipse.equinox.security ‘ and restart Eclipse, the error gone.
in eclipse git:
change some code, then'commit and push'-->regected,non fast forward-->'pull'-->Cannot pull into a repository with state: MERGING_RESOLVED-->reset-->'pull'-->after manually solve conficts,'push to upstream'-->regected,non fast forward-->'pull'-->Cannot pull into a repository with state: MERGING_RESOLVED.
solved:
after manually solve conficts, change a little code other,then do 'commit and push'-->ok.
删除本地分支 git branch -d XX 提示: the branch XXX is not fully merged
原因:XXX分支有没有合并到当前分支的内容
解决方法:使用大写的D 强制删除 git branch -D XXX
常用命令:
1. 在[branch]分支上新建一个分支,并指向[branch]的某一次[commit] : $ git branch [branch] [commit]