禁止某些文件提交
我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用 --cached 选项:
$ git rm --cached README
git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。比如:
$ git rm log/\*.log
注意到星号 * 之前的反斜杠 \, 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。 此命令删除 log/ 目录下扩展名为 .log 的所有文件。 类似的比如:
$ git rm \*~
该命令会删除所有名字以 ~ 结尾的文件。
查看提交历史 git log
- 其中一个比较有用的选项是 -p 或 --patch ,它会显示每次提交所引入的差异(按 补丁 的格式输出)。 你也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交:
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
- 最有意思的是 format ,可以定制记录的显示格式。 这样的输出对后期提取分析格外有用——因为你知道输出的格式不会随着 Git 的更新而发生改变:
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit

撤消操作
- 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:
$ git commit --amend
使用场景是
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
这里我们提交了一次代码并且写了提交的log,但是发现少提交一个文件,此时我们一般都会再次add,然后commit,这样仓库的提交历史中会多一条记录。而git commit --amend存在的意义是,如果你不想在添加一条信息,可以 原位替换上一次的提交记录。
- 如果我们add了多个文件,但是此时我们不想让某个文件add,可以执行git reset HEAD <file>...来取消暂存.
- 如果你并不想保留对 CONTRIBUTING.md 文件的修改怎么办? 你该如何方便地撤消修改——将它还原成上次提交时的样子(或者刚克隆完的样子,或者刚把它放入工作目录时的样子)? 幸运的是,git status 也告诉了你应该如何做。 在最后一个例子中,未暂存区域是这样:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
它非常清楚地告诉了你如何撤消之前所做的修改。 让我们来按照提示执行:
$ git checkout -- CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
git起别名
有时候git命令很长,不好记忆,我们可以给其起别名,方便我们输入,eg:
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
要输入 git commit 时,只需要输入 git ci。
为了解决取消暂存文件的易用性问题,可以向 Git 中添加你自己的取消暂存别名:
$ git config --global alias.unstage 'reset HEAD --'
这会使下面的两个命令等价:
$ git unstage fileA
$ git reset HEAD -- fileA
在这里总结一下在mac或者linux中,终端命令起别名:$ alias ll='ls -la',这里ll就和ls -la等价,以此延伸其他的命令。
git添加分支
添加testing分支
$ git branch testing
查看分支:
git branch
切换分支:
git checkout master
这里补充一个命令git commit -a -m 'made other changes'
相当于git add .
+git commit -m"made other changes"
git撤销与回滚
- git commit之前
。 未添加到暂存区的撤销(没有git add)
。添加进暂存区的撤销(git add后)
$ git status
On branch test_git
Changes not staged for commit: 没有添加到暂存区
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeUnitTrait.php
modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeWordFilterTrait.php
可以通过
git checkout -- filename来撤销修改
git checkout -- new_src/app/Http/Controllers/Frontend/KyHome/KyHomeWordFilterTrait.php
再次查看文件状态发现选择的文件已经成功被撤销了。
$ git status
On branch test_git
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeUnitTrait.php
如果想将多个文件一次性撤销可以用
git checkout -- .
上面是 未添加到暂存区的撤销
下面是添加到暂存区的
$ git status
On branch test_git
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php
$ git add -A
$ git status
On branch test_git
Changes to be committed: 已经添加暂存区了
(use "git reset HEAD <file>..." to unstage)
modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php
从暂存区撤销
$ git reset HEAD new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
Unstaged changes after reset:
M new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
如果想一次性将所有暂存区文件撤销回来,还是上面的命令,不过不用加文件路径。
$ git reset HEAD
Unstaged changes after reset:
M new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
M new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php
- git commit之后
如果当commit提交后想撤销的话,这就需要revert命令。git revert 命令是撤销某次操作,而在此次操作之前和之后的提交记录都会保留。
先修改了几个文件然后commit 再用git log查看提交记录。
commit 2842c8065322085c31fb7b8207b6296047c4ea3
Author: songguojun <songgj@kingnet.sh>
Date: Sat Apr 28 11:21:30 2018 +0800
add content
然后使用revert 后面跟上git提交的commitid
git revert 2842c8065322085c31fb7b8207b6296047c4ea3
然后在推送到远端更新远程仓库代码,修改的文件就撤销回来了。注意的是revert奇数次生效,偶数次又回到之前的修改状态。比如一个文件内容是a,那么修改为ab,revert后文件变成了a,如果在revert后文件又还原成ab了。
还有就是如果想回到之前某个版本,可以用reset命令,可以回退到某次提交,那该提交之后的提交都会回滚,不过这种覆盖是不可逆的,之前的提交记录都没有了。所以平时开发中尽量注意,避免使用reset。
用法:
git reset --hard commit_id
--hard – 强制将缓存区和工作目录都同步到你指定的提交
git reset --hard fdeb212a5418cc8e31f32d63cf197550297468ec
HEAD is now at fdeb212 增加mysql端口配置
然后在提交到远端覆盖。
查看git项目在哪个路径下?
输入git remote -v
即可查看git的服务器地址:

查看git项目是从git的哪个分支上拉下来的命令?
如果还想看项目是从git的那个分支上拉下来的,可以在命令行中输入:git remote show origin
即可:

网友评论