1.git status命令
1.1 使用 git status [项目名] 可以查看当前项目树总体状态。
1.2 为了能够查看当前工程下每一个具体文件的状态(哪些文件是新建的,哪些文件是更改的)
使用 git status -u [项目名]
1.3 1.2的问题在于输出过于详细,提示语繁琐所以可以
使用 git status -u [项目名]
新添加的未跟踪文件前面有 ??
标记,新添加到暂存区中的文件前面有 A
标记出现在右边的 M
表示该文件被
修改了但是还没放入暂存区,出现在靠左边的 M
表示该文件被修改了并放入了暂存区
1.4 1.3的问题在于类似于.class文件应该被忽略,所以
1.3.1 在项目下 touch .gitignore
1.3.2 使用 vi .gitignore 写入要过滤掉的文件如[*.class]
2. git clone与checkout的区别,Git 克隆的是该 Git 仓库服务器上的几乎所有数据,而不
是仅仅复制完成你的工作所需要文件。每一次的克隆操作,实际上都是一次对代码仓库的完整备份
3. 什么是git快照。
从一个简化的流程来理解
---sha1:安全哈希算法------- 在创建Version 1时: 计算A B C的sha1, 然后在.git/object中, 创建以下文件 (即"快照") - 文件名 sha1(A), 內容A - 文件名 sha1(B), 內容B - 文件名 sha1(C), 內容C 最后把这个sha1写到一个新文件里, 这个新文件就是Version 1. ---------- 在创建Version 2时 计算A1 B C1的sha1, 然后发现sha1(B)这个文件名已经有了, 所以只需要再创建两个文件: - 文件名 sha1(A1), 內容A1 - 文件名 sha1(C1), 內容C1 最后再把A1 B C1的sha1写到新文件里, 这个新文件就是Version 2 ---------- 以下略
对于svn这类版本控制软件记录的是一组基本文件和每个文件随时间逐步积累的差异。
4. git和svn的区别
4.1 由2可以了解到 Git应是分布式的,而Svn不是分布的。
4.2 Git没有一个全局版本号,而SVN有。
4.3 由3可以知道git与svn在对待数据的方法上存在区别,前者是使用快照,后者使用差异比较
5. git的三种状态
5.1 已提交(committed)、已修改(modified)和已暂存(staged)
5.2 由5.1引入Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。
6. git add命令
6.1 git add命令可以把工作目录中的变更文件提交到暂存区。
6.2 修改使用git add命令添加到暂存区里的文件,需要重新使用git add命令将该文件添加到暂存区。
6.3 git add 按需求添加文件
6.3.1使用git add命令将深层次目录文件添加到暂存区
6.3.2 git add -u
添加编辑或者删除的文件,不包括新添加的文件。
6.3.3 git add .
表示添加新文件和编辑过的文件不包括删除的文件。
6.3.4 git add -A
表示添加所有内容。
6.3.5 git add 配合shell正则才能发挥出真正的“按需求添加文件”。===》学习shell正则
7. git bash终端中文输出显示乱码解决方案
7.1 在多终端的空白处,点击鼠标右键,弹出的菜单中选择【options...】
7.2 弹出的菜单中找到【Text】->【Local】,下拉菜单中选择zh_CN
7.3 执行命令: git config --global core.quotepath false
7.4 继续执行命令:git diff仍然不能显示中文信息,这是因为git bash显示的编码格式是utf-8,而windows记事
本的编码格式是gb2312。
7.5 将文件另存为utf-8格式,重启git bash后执行git diff命令查看中文显示信息。
8. git diff命令
8.1 git diff将通过文件补丁的格式显示具体哪些行发生了改变
8.2 要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff,它会比较的工作目录中当前文件和
暂存区域快照之间的差异若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --staged 命令
9. git commit命令
9.1 git commit命令会启动文本编辑器
如图开头有一空行,供你输入提交说明,保存退出后就直接提交了
9.2 git commit -v 相当于将git diff命令的结果写入到编辑器中
9.3 使用git commit -m "message" 提交。
9.4 使用git commit -a会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
9.5 使用git commit --amend修改最近一次提交的提交信息。
9.6 在完成提交时,若发现有遗漏的文件没有提交,可以先使用git add命令进行跟踪,在使
用 git commit --amend "name"进行提交,这样在log中就会看到这是一次commit操作而不是两次。
9.7 9.6的问题在于git commit --amend "name"是一次小的变基操作,所以一旦将本地库推送到远程库
后并不建议用此命令。
10. 移除文件
10.1 git rm 命令是从暂存区域移除文件,本地文件也会一并被删除。
10.2 如果只是简单地从工作目录中手工删除文件,还需对该文件执行git rm命令。
10.3 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。
10.4 git rm --cached从暂存区域移除仍然希望保留在当前工作目录中,但是并不想让 Git 继续跟踪
11. 文件重命名
11.1 git mv file_from file_to
12. git remote
12.1 git remote查看远程仓库
12.2 git remote -v 会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。
12.3 git remote add <shortname> <url> 添加一个新的远程 Git 仓库
git remote add pn https://github.com/wang/pun
12.4 git remote show origin这个命令列出了当你在特定的分支上执行 git push 会自动地推送
到哪一个远程分支。 它也同样地列出了哪些远程分支不在你的本地,哪些远程分支已经从
服务器上移除了,还有当你执行 git pull 时哪些分支会自动合并。
12.5 git remote rename重命名远程仓库 git remote rename pn pname。
12.6 git remote rm pname 移除一个远程仓库。
13 git log
13.1 git log -p [-n] 用来显示每次提交的差异,-n表示显示几条,为任意整数。
13.2 git log --stat 查看提交的简略信息统计。
13.1 git log --oneline --decorate 查看各个分支当前所指的对象。
13.2 git log --oneline --decorate --graph --all查看各个分支的指向以及项目的分支分叉情况。
14 git checkout
14.1 git checkout -b "name" 新建一个分支并同时切换到那个分支上。
14.2 git checkout -b [branch] [remotename]/[branch] 跟踪分支
15 git branch
15.1 git branch newbranch 新建分支
15.2 git branch -d "name" 删除指定本地分支
15.3 git branch -v 查看每一个分支的最后一次提交
15.4 git branch -a 查看远程分支,远程分支会用红色表示出来
15.5 git branch -m old new本地分支重命名
15.6 本地分支跟踪远程分支 git branch --set-upstream-to=origin/<branch> master
16 git clone
16.1 当运行git clone命令时默认的远程仓库名字是origin,运行git clone -o origin1,那么你默认的远
程分支名字将会是origin1/master。
17 git push
17.1 git push origin name:name可以通过这种格式来推送本地分支到一个命名不相同的远程分支
git push origin name:servicename。
17.2 删除远程分支 git push origin :br (origin 后面有空格)
18 git merge
18.1 git merge newbranch在当前分支下合并newbranch分支
18.2 git merge --abort尝试恢复到你运行合并前的状态。
18.3 git merge -Xignore-space-change [-Xignore-all-space]忽略所有[任意数量]空白行的修改,第二个
选项忽略所有空白修改。
19 git reset
19.1 git reset "哈希值" ,本质上是撤销了一次 git commit 命令。
19.2 git reset --soft HEAD~,将分支移动到上一次提交。
19.3 19.1与19.2的区别在于19.1可以根据哈希值撤销提交操作到任意版本,而19.2只是撤
销的上一版本。
19.4 19.1与19.2只是移动HEAD所指向的分支版本,并不会改变工作目录和暂存区。
19.5 git reset --mixed HEAD~ ,撤销一上次提交的同时取消暂存区的所有的东西,即
回滚到git add和git commit命令之前。
19.6 git reset file.txt 取消暂存的文件。
20 git stash
储藏本地文件
21 git init
21.1 git init --bare xxx.git 在git服务器上创建裸仓
22 git mv
22.1 git mv test" "d.txt source/ 将test d.txt 文件移到source目录下,文件名有空格的话可以使用空格引号来代替。
综合运用:
23 git恢复删除的文件
要查看删除的文件: git ls-files --deleted
恢复则需要从新checkout:git checkout <deleted_file>
多个文件同时操作可以使用xargs
git ls-files -d | xargs git checkout 分支名
24 更新单个文件
第一步 git fetch
第二步 git checkout origin/master "工作目录文件路径"
25 恢复修改的文件
25.1 只是修改了文件,没有做任何的git操作 git checkout -- test.txt
25.2 修改了文件,并提交到暂存区或本地服务器
第一步 git reset HEAD
第二步 git checkout -- test.txt
25.3 修改了文件,并提交到本地服务器
第一步 git reset HEAD
第二步 git checkout -- test.txt