创建git项目并初始化

建立一个新文件夹,然后将该文件夹定义为git项目

Lilis-MacBook-Pro:GitDir lili$ mkdir testgit
Lilis-MacBook-Pro:GitDir lili$ cd testgit
Lilis-MacBook-Pro:testgit lili$ git init
Initialized empty Git repository in /Users/lili/快盘/GitDir/testgit/.git/

为新项目添加文件和内容

Lilis-MacBook-Pro:testgit lili$ echo "test git" > README
Lilis-MacBook-Pro:testgit lili$ LS
README
Lilis-MacBook-Pro:testgit lili$ cat README
test git

新的内容都是存储在暂存区中,只有提交了才会存储于Git目录中。

提交修改和新建内容

Lilis-MacBook-Pro:testgit lili$ git add README
Lilis-MacBook-Pro:testgit lili$ git commit -m "test add"

[master (root-commit) d12a913] test add
1 file changed, 1 insertion(+)
create mode 100644 README
Lilis-MacBook-Pro:testgit lili$ git push
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

git remote add <name> <url>

and then push using the remote name

git push <name>

建立项目分支和切换项目分支

查看当前作业分支用git branch命令,打*号的那个就是当前操作分支

新建分支用如下命令:

Lilis-MacBook-Pro:testgit lili$ git branch experimental
Lilis-MacBook-Pro:testgit lili$ git branch
experimental
* master

新建后查看发现多了experimental分支,并且当前分支是master分支,这个是建立git项目默认的分支

切换分支按照如下:

Lilis-MacBook-Pro:testgit lili$ git checkout experimental
Switched to branch 'experimental'
Lilis-MacBook-Pro:testgit lili$ git branch
* experimental
master

分支内容merge

在不同分支下共同操作同一个文件(README),初始化时内容是test git,那现在切换到experimental分支下写入一些内容:

Lilis-MacBook-Pro:testgit lili$ git checkout experimental
Switched to branch 'experimental'
Lilis-MacBook-Pro:testgit lili$ vim README
test git
modified in experimental branch

然后git commit -a并输入comment内容, commit -a是一次性添加并commit已存在的文件的修改,其实是add和commit的合并命令

切换到master分支,也README中输入一行内容并git commit -a

Lilis-MacBook-Pro:testgit lili$ git checkout master
Switched to branch 'master'
Lilis-MacBook-Pro:testgit lili$ vim README
test git
add one line in branch master

这时,两个分支就有了各自不同的修改(diverged);我们可以通过下面的命令来合并“experimental”和“master”两个分支:

通过如下命令来合并experimental分支到master分支:

Lilis-MacBook-Pro:testgit lili$ git merge experimental
Auto-merging README
CONFLICT (content): Merge conflict in README
Automatic merge failed; fix conflicts and then commit the result.
Lilis-MacBook-Pro:testgit lili$ cat README
test git
<<<<<<< HEAD
add one line in branch master
=======
modified in experimental branch
>>>>>>> experimental

如果两个分支没有冲突,则合并完成;有冲突可以通过git diff来查看冲突

Lilis-MacBook-Pro:testgit lili$ git diff
diff --cc README
index 7ef0026,1633bc2..
--- a/README
+++ b/README
@@@ -, -, +, @@@
test git
++<<<<<<< HEAD
+add one line in branch master
++=======
+ modified in experimental branch
++>>>>>>> experimental

删除项目分支

git branch -d experimental

git branch -d只能删除那些已经被当前分支的合并的分支. 如果你要强制删除某个分支的话就用git branch –D

git diff 和git diff --cache的区别

Lilis-MacBook-Pro:testgit lili$ vim README
Lilis-MacBook-Pro:testgit lili$ git diff
diff --git a/README b/README
index 8ce43a3..bb9ae0b
--- a/README
+++ b/README
@@ - +, @@
test git
+test git diff and git diff --cached
Lilis-MacBook-Pro:testgit lili$ git add README
Lilis-MacBook-Pro:testgit lili$ git diff
Lilis-MacBook-Pro:testgit lili$ git diff --c
--cached --check --color --color-words --cumulative
Lilis-MacBook-Pro:testgit lili$ git diff --cached
diff --git a/README b/README
index 8ce43a3..bb9ae0b
--- a/README
+++ b/README
@@ - +, @@
test git
+test git diff and git diff --cached
Lilis-MacBook-Pro:testgit lili$ git commit -m "test git diff"
[master a2c52a3] test git diff
file changed, insertion(+)
Lilis-MacBook-Pro:testgit lili$ git diff
Lilis-MacBook-Pro:testgit lili$ git diff --cached
Lilis-MacBook-Pro:testgit lili$

git diff 比较的是工作目录树与暂存区之间的区别。

git diff --cached 比较的是暂存区和版本库最后一个版本的区别。

git diff HEAD 比较的是工作目录树(包括暂存的和未暂存的修改)与版本库最后一个版本的差别。

忽略某些文件

可以在你的顶层工作目录中添加一个叫".gitignore"的文件,来告诉Git系统要忽略 掉哪些文件,下面是文件内容的示例:

# 以'#' 开始的行,被视为注释.
# 忽略掉所有文件名是 foo.txt 的文件.
foo.txt
# 忽略所有生成的 html 文件,
*.html
# foo.html是手工维护的,所以例外.
!foo.html
# 忽略所有.o 和 .a文件.
*.[oa]

git之删除和恢复:工作区,暂存区,仓库master

一、rm只删除工作区信息;

使用 git checkout -- file即可恢复;

二、git rm 删除工作区和stage信息;

1、使用git reset HEAD -- file即可恢复;

2、恢复步骤:

1)先使用git reset HeAD -- file从master中把已删除信息copy到到stage区;

2)再使用git checkout -- file从stage区把已删除信息copy到工作区。over!!!

3)这时你就看到删除的文件又回来啦。啦啦啦!

三、git commit -m “file”删除工作区,stage和master信息;

1、使用git reset --hard HEAD^即可恢复。

2、恢复步骤:

1)先使用git reset --hard HEAD^从master回收处恢复到master中;

2)再使用git reset HeAD -- file从master中把已删除信息copy到到stage区;

3)最后,使用git checkout -- file从stage区把已删除信息copy到工作区。

4)这时你就看到删除的文件又回来啦。啦啦啦!

以上我都亲自试过,很好用。

就是不知道从master中删除的信息暂时存放在哪里了。

另外:学习git基础推荐http://www.liaoxuefeng.com/这个博客,写的很浅显易懂!

最新文章

  1. 【转】webGL与OpenGL的不同
  2. 多列布局——column-count
  3. WCF学习第一天
  4. android 开源和一些博客总结
  5. Ibatis学习总结7--SqlMapClient 执行 SQL 语句
  6. vsftpd匿名用户只能上传不能下载
  7. 工程目录 Java/Web/Maven
  8. js模拟快捷键操作表单
  9. MYSQL存储过程中的IN、OUT和INOUT
  10. Linux Bash终端快捷键小结
  11. Android 内核基本知识
  12. .net项目中上传大图片失败
  13. D3.js:饼状图的制作
  14. [ABP实战开源项目]--YoYoCms目录
  15. 使用fabric解决百度BMR的spark集群各节点的部署问题
  16. Nginx (三) 使用Keepalived搭建高可用服务
  17. context.go
  18. Postman-----将 A 请求中 response Body 中的参数值传入到下一个请求 B 的 request body 中作为参数发送请求
  19. Fetch API &amp; Async Await
  20. POJ-2796 &amp; 2019南昌邀请赛网络赛 I. 区间最大min*sum

热门文章

  1. 字符串转到js对象
  2. 在非MFC程序中引用CString
  3. 轻量级Java_EE企业应用实战-第5章Hibernate的基本用法-001
  4. HashMap源代码深入剖析
  5. 安装Ubuntu双系统系列——更换源
  6. 新建一个struts2项目
  7. Task的使用
  8. Shipping Transactions &gt; Error: The action can not be performed because the selected records could not be locked.
  9. c# 控件闪烁处理方法
  10. c# equals与==的区别