git初接触核心指令
1. 配置git的基本信息。
在每次提交时都会引用这两条基本信息,标识更新提交者,会随更新一起保存在log中 git config –-global user.name “Your Name”
git config –-global user.email “you@example.com”
使用–global 会把修改的配置信息保存在主目录下,所有项目都会默认使用此配置,如果想要针对特定项目配置用户信息,只需把–global去掉
2. 设置默认的文本编辑器
git config --global core.editor vim
3. 差异分析工具
可以通过才命令更换git默认的差异分析工具:
`git config --global merge.tool vim`
4. 查看配置信息
`git config --list`
配置信息示例如下:
>core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
http.sslcainfo=E:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
diff.astextplain.textconv=astextplain
rebase.autosquash=true
gui.recentrepo=E:/l/MyEclipse2014/Workspace/yc
user.email=jeanheo@foxmail.com
user.name=zenghao
如果要查询特定的用户信息,可以像这样:
`git config user.name`
`zenghao`
5. 获取帮助,可以使用下面任一种
> git help [cmd]
git [cmd] --help
man git-[cmd]
如: git help remote
6. 创建一个git项目
-
从当前目录初始化
git init
初始化后,当前目录下会有一个名为.git的目录,保存了Git需要的数据和资源,然后,我们可以将当前目录中的文件提交到git仓库中:git add README
git commit -m ‘firse commit’ 从远程仓库直接复制
git clone [url]
使用此命令会将远程仓库最新版本的项目复制到本地一个新建文件夹中,文件夹往往为项目名,如果希望在克隆时,自己定义项目名称,可以指定实现:git clone [url] mydir
7. 查看当前文件状态
git status
如果git init后调用此命令,会看到:
$ git status
On branch master
Initial commit
nothing to commit (create/copy files and use “git add” to track)
8. 跟踪新文件,git add [file]
。
通过跟踪新文件,能将目录中的新文件从untracked file的列表中移动到new file中如果我们对暂存区域的文件处理妥当后,可以使用 git commit [-m ‘msg’] 来提交更新。另一方面,如果我们想自动把所有已经跟踪过的文件暂存起来一并提交,可以使用git commit -a ,
1. 若在项目目录中新建一个文件,再调用git status,我们会看到:
$ touch README
> \$ git status
On branch master
> Initial commit
> Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)
2. 当我们跟踪该文件时,会有:
$git add README
$ git status
On branch masterInitial commit
Changes to be committed:
(use “git rm –cached …” to unstage)
在 Changes to be committed下面的文件,就说明已处于暂存状态,如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。
3. 如果我们修改已跟踪的文件,再运行git status,会看到:
$ echo ‘helloworld’ > README
$ cat README
hello world$ git status
On branch masterInitial commit
Changes to be committed:
(use “git rm –cached …” to unstage)new file: README
Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)modified: README
注意上面我们看到Changes not staged for commit:说明我们刚刚的echo helloword 修改操作并未加入git的暂存文件记录中,如果此时调用git commit 将README提交上去,我们会发现git仓库存储的README文件中并没有helloworld字段。
4. 如果我们此时提交文件,会看到:
$ git commit README -m ‘first commit’
[master (root-commit) d27bb9e] first commit
1 file changed, 1 insertion(+)
create mode 100644 README$ git status
On branch master
Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)modified: README
no changes added to commit (use “git add” and/or “git commit -a”)
由以上我们看到,对于我们已add到git暂存列表中的文件,如果再次修改,必须再次调用git add file才能将修改提交到暂存文件中。
git其它常用指令
1. 配置gitignore忽略文件。
在项目中,对于图片,音乐等文件,我们想忽略它们而不纳入git管理,我们可以创建.gitignore文件,对于。gitignore文件,编辑由一下几点需要注意:
1. 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
2. 可以使用标准的 glob 模式匹配。
3. 匹配模式最后跟反斜杠( / )说明要忽略的是目录。
4. 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号( ! )取反
glob 模式是指 shell 所使用的简化了的正则表达式。星号( * )匹配零个或多个任意字符; [abc] 匹配
任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号( ? )
只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配
(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
们再看一个 .gitignore 文件的例子:
\# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
2. 对比全部文件暂存前后的差异
如果要对比已经暂存起来的文件和上次提交时的快照之间的差异,可以用 ·git diff –cached· 命令
3. 移除文件
如果我们想从已跟踪文件(暂存区域)中移除文件,并连带从工作目录中删除指定的文件,可以使用git rm
命令。如果删除之前修改过并且已经放到暂存区域的话,则必须
要用强制删除选项 -f ,以防误删除文件后丢失修改的内容。如果我们仅仅想移除跟踪但不删除文件,可以加上–cached参数, git rm –cached file
4. 移动重命名文件
通过使用git mv [file1] [(dir/)file2] 我们可以实现对文件的移动和重命名,如:
$ git mv test1 dir/test2
$ git status
On branch master
Changes to be committed:
(use “git reset HEAD …” to unstage)renamed: test1 -> dir/test2
如果我们只是单纯地使用Linux命令mv,git不会智能跟踪,
$ mv dir/test2 test1
$ git status
On branch masterChanges not staged for commit:
(use “git add/rm …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)deleted: dir/test2
Untracked files:
(use “git add …” to include in what will be committed)test1
5. 查看历史提交记录。
我们可以使用git log来查看历史提交记录,这时一开始提高的global config就起作用的,它会说明每次修改的作者和对应的修改时间,如下所示:
commit 399c870166f0857c9c269fed91f193311993aa66
Author: zenghao jeanheo@foxmail.com
Date: Thu Mar 10 14:55:25 2016 +0800
second commit
6. 撤销操作
- 如果我们想要重新修改上次commit的提交信息,可以使用
git commit --amend
。 - 如果我们想要撤销将文件add到暂存区的操作,可以使用
git reset HEAD <file>
这样,文件的状态就会从“Changes to be committed”回到“Changed but not updated” - 如果我们想撤销对未缓存区域中文件的修改,可以使用
git checkout -- <file>
远程仓库的使用
命令 | 描述 |
---|---|
git remote | 简短地查看当前配置有哪些远程仓库,如果我们想显示对应的远程地址,可以添加-v参数 |
git remote add [shortname] [url] |
添加远程仓库 |
git fetch [remote-name] |
从远程仓库抓取数据到本地。fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。而如果设置了某个分支用于跟踪某个远端仓库的分支(参见下节及第三章的内容),可以使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。 |
git push [remote-name] [branch-name] |
在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,能够通过此命令将本地仓库中的数据推送到远程仓库中 |
git remote show [remote-name] | 可用于查看查看某个远程仓库的详细信息 |
git remote rename [remote-name1] [remote-name2] | 修改某个远程仓库的简短名称 |
git remote rm [remote-name] | 移除对应的远端仓库 |