实验楼在线教育:55 个 Linux 教程和练手项目合集zhuanlan.zhihu.com
![a139adfeb1a8fd18d1d98792e5118887.png](https://i-blog.csdnimg.cn/blog_migrate/7e62c2f238437b1ba863d21b75db0c1d.png)
知识点:忽略部分文件
rebase 命令
stash 命令
Git 树名
二、忽略某些文件
项目中经常会生成一些 Git 系统不需要追踪(track)的文件。
典型的是在编译生成过程中产生的文件或是编程器生成的临时备份文件。
当然,如果你不追踪(track)这些文件,平时可以不使用 git add 去把它们加到缓存区中,
但是这样会很快变成一件烦人的事,你发现项目中到处有未追踪(untracked)的文件。
这样也使 git add . 和 git commit -a 变得实际上没有用处,同时 git status 命令的输出也会有它们。
如何解决这些问题呢?
你可以在你的顶层工作目录中添加一个叫 .gitignore 的文件,
来告诉 Git 系统要忽略掉哪些文件,下面是文件内容的示例。
以'#' 开始的行被视为注释。,
.gitignore 的文件内容为:
foo.txt #忽略掉所有文件名是 foo.txt 的文件
*.html #忽略所有生成的 html 文件
!foo.html #如果 foo.html 这个文件不能忽略,可以写个例外
*.[oa] #忽略所有 .o 和 .a 文件
三、rebase
假设你现在基于远程分支 origin,创建一个叫 mywork 的分支。
$ cd /home/shiyanlou/gitproject
$ git checkout -b mywork origin
现在我们在这个分支做一些修改,然后生成两个提交(commit)。
$ vim file.txt
$ git commit
$ vim otherfile.txt
$ git commit
但是与此同时,有些人也在 origin 分支上做了一些修改并且做了提交了。
这就意味着 origin 和 mywork 这两个分支各自 前进 了,它们之间 分叉 了。
在这里,你可以用 pull 命令把 origin 分支上的修改拉下来并且和你的修改合并;
结果看起来是会出现一个新的 合并的提交 (merge commit):
但是,如果你想让 mywork 分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:
$ git checkout mywork
$ git rebase origin
这些命令会把你的 mywork 分支里的每个提交(commit)取消掉,并且把它们临时保存为
补丁(patch)(这些补丁放到 .git/rebase 目录中),然后把 mywork 分支更新到最新的 origin 分支,
最后把保存的这些补丁应用到 mywork 分支上。
当 mywork 分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。
如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除。
在 rebase 的过程中,也许会出现冲突(conflict)。在这种情况,Git 会停止 rebase 并会让你去解决冲突;
在解决完冲突后,用 git-add 命令去更新这些内容的索引(Index), 然后,你无需执行 git-commit,只要执行:
$ git rebase --continue
这样 git 会继续应用(apply)余下的补丁。
在任何时候,你可以用 --abort 参数来终止rebase的行动,并且 mywork 分支会回到 rebase 开始前的状态。
$ git rebase --abort
四、交互式 rebase
你也可以选择进行交互式的 rebase。这种方法通常用于在向别处推送提交之前对它们进行重写。
交互式 rebase 提供了一个简单易用的途径让你在和别人分享提交之前对你的提交进行分割、
合并或者重排序。在把从其他开发者处拉取的提交应用到本地时,你也可以使用交互式 rebase 对它们进行清理。
如果你想在 rebase 的过程中对一部分提交进行修改,你可以在 git rebase 命令中
加入 -i 或 --interactive 参数去调用交互模式:
$ git rebase -i origin/master
这个命令会执行交互式 rebase 操作,操作对象是那些自最后一次从 origin
仓库拉取或者向origin 推送之后的所有提交。
若想查看一下将被 rebase 的提交,可以用如下的 log 命令:
$ git log github/master..
一旦你完成对提交信息的编辑并且退出编辑器,这个新的提交及提交信息会被保存起来。
如果指定进行 edit 操作,git 会完成同样的工作,但是在对下一提交进行操作之前,
它会返回到命令行让你对提交进行修正,或者对提交内容进行修改。
例如你想要分割一个提交,你需要对那个提交指定 edit 操作:
你会进入到命令行,撤销(revert)该提交,然后创建两个(或者更多个)新提交。假设提交 21d80a5 修改
了两个文件,file1 和 file2,你想把这两个修改放到不同的提交里。你可以在进入命令行之后进行如下的操作:
$ git reset HEAD^
$ git add file1
$ git commit -m 'first part of split commit'
$ git add file2
$ git commit -m 'second part of split commit'
$ git rebase --continue
交互式 rebase 的最后一个作用是丢弃提交。如果把一行删除而不是指定 pick 、squash和
edit 中的任何一个,git 会从历史中移除该提交。
五、交互式添加
交互式添加提供友好的界面去操作 Git 索引(index),同时也提供了可视化索引的能力。
只需简单输入 git add -i,即可使用此功能。Git 会列出所有修改过的文件及它们的状态:
$ git add -i
在这个例子中,我们可以看到有5个修改过的文件还没有被加入到索引中(unstaged),
甚至可以看到每个文件增加和减少的行数。紧接着是一个交互式的菜单,
列出了我们可以在此模式中使用的命令。
如果我们想要暂存(stage)这些文件,我们可以键入 2 或者 u 进入更新(update)模式。
然后我们可以通过键入文件的范围(本例中是1-4)来决定把哪些文件加入到索引之中。
现在我们可以看到前4个文件已经被暂存,但是最后一个没有。
基本上,这是一个更加紧凑的查看状态的方式,
实质上的信息与我们在命令行中运行 git status 是一致的:
$ git status
![aea6bf1795b2bcc3e9785ae98e562a80.png](https://i-blog.csdnimg.cn/blog_migrate/23c23d1cddbae685e5ad4995d8d1b74e.jpeg)
![4d0c5322e2f7a8feebae24d687a818be.png](https://i-blog.csdnimg.cn/blog_migrate/5fe580aa157428a480611cdb199c6cc1.jpeg)
Github 快速上手实战教程
1.2 实验知识点
SSH 公私钥的基本使用
Github 的基本使用
Git 工具的基本使用
1.3 实验环境
git: Git 管理工具
ssh-keygen:SSH 公私钥管理工具
xfce终端
![b920bb357b4f0bfc037d2f0b97ba1f45.png](https://i-blog.csdnimg.cn/blog_migrate/9bb4f7601163a9d06629c78db426bb38.jpeg)
![8d7e4062f0666e7d3b3d8fe87e54f9ba.png](https://i-blog.csdnimg.cn/blog_migrate/ab5f1b91b32ca9f35d2ae5b2c75d5026.jpeg)
![6b3eb4007542c85e04890d88f328a328.png](https://i-blog.csdnimg.cn/blog_migrate/45fb0f6965ab8ea409d7afc80835234d.jpeg)
![fac3ad24f176cf751c708bcc7169932d.png](https://i-blog.csdnimg.cn/blog_migrate/68f980ab29ef19a786273811271673ed.jpeg)
![158c8b0bbdcfb26ba20b7111b874e121.png](https://i-blog.csdnimg.cn/blog_migrate/77d88744de7dc0224e50f6c686abb1f4.jpeg)
![29e3e7dc88e6d7496b55775da22c85e2.png](https://i-blog.csdnimg.cn/blog_migrate/f3a34f64f88542a6cfce9f629d1961a2.jpeg)
![f232668112c8985e0bb82fdc6791a30f.png](https://i-blog.csdnimg.cn/blog_migrate/b28355ae6d0cd7af5e8ccfb878dd3b63.jpeg)