git官网:https://git-scm.com/
在git中,文件可以处于以下三种状态之一:
-
已提交(commited)
:数据已经被安全的存入本地数据库中。 -
已更改(modified)
:已更改了文件,但未提交到数据库中。 -
已暂存(staged)
:对已修改的文件的当前版本作出了标识,并将其加入下一次要提交的快照中。
安装Git
1.Linux上的安装方法
https://git-scm.com/download/linux
2.Mac上的安装方法
- 最简单的可能是安装Xcode命令行工具
- 在终端中执行git命令时,系统会自动检查是否安装git:若无,则会提示安装它。
- https://git-scm.com/download/mac
3.Windows上的安装方法
- https://git-scm.com/download/win
- PowerShell
- Git Bash
Git的首次配置
1.用户的身份
安装好git之后就是设置用户名和电子邮件地址(非常重要的一步),因为每次都需要这些信息,还会被写入到所创建的提交中,不可更改,设置命令如下:
$ git config --global user.name 'username'
$ git config --global user.email 'email'
globel是全局信息,只需设置一次即可,以后不管在系统中执行什么操作,Git都会使用这些已经设置好的信息。
如果想在某个项目中使用其他用户名和电子邮件地址,可以在项目中使用不带 -- global选项的命令。
2.文本编辑器(可不设置,git会选择系统默认编辑器)
设置编辑器
$ git config --global core.editor xscode
在windows系统中使用不同的编辑器例如 Notepad++:
// 在x86系统中:
$ git config --global core.editor "'C:/Program Files/NotePad++/nodepad++.exe' -multiInst -nosession"
// 在x64系统中:
$ git config --global core.editor "'C:/Program Files(x86)/NotePad++/nodepad++.exe' -multiInst "
2.检查个人设置
git config --list
or git config <key>
$ git config --list
user.name=**
user.email=**
commit.template=/Users/**/.stCommitMsg
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
$ git config user.name
****
2.获取帮助
如果在使用Git的过程中需要帮助:以下三种可以查看Git任何命令的帮助页面
$ git help
Git基础
1.获取Git仓库
创建git项目的两种办法
- 把现有的项目或者目录导入到Git中
- 从服务器上克隆现有的项目
把现有的项目初始化Git仓库
想要用Git对现有的项目进行跟踪管理,在项目目录中输入
$ git init
会创建一个.git的子目录,这个子目录中包含了构成Git仓库中所有必须的文件。但此刻Git尚未跟踪项目中的任何文件。
克隆现有的仓库
使用如下命令,克隆一份现有仓库的副本
$ git clone https://github.com/xxx/stickHero.git
git clone
默认会从服务器上把整个项目历史中每个文件的所有历史版本都拉取下来。
这会创建一个名为stickHero的文件夹, 如果想将项目克隆到其他名字的目录中,可以把目录名作为命令行的选项
$ git clone https://github.com/xxx/stickHero.git lujing
2.查看当前文件的状态
git status
(冗长) git status -s
\ git status --short
$ git status
// 如果是克隆仓库之后立即查看状态,会看到类似如下的输出
On branch master
nothing to commit, working tree clean
// 显示当前分支,并提醒没有被更改过任何文件。
git status -s
$ git status -s
?? LICENSE.txt //未被跟踪的新文件
A lib/git.rb // 已暂存的新文件
M lib/git.rb // 已修改的文件
MM lib/git.rb // 已修改并被存入到暂存区,并且又修改,工作区和暂存区都有该文件
- 例子:创建一个README文件,并查看状态
$ echo 'my-project' > README
// 此时查看文件夹中已经有README文件,并且文件的内容为my-project
$ git status
On branch master
No commits yet
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)
// 可以看到,新的文件处于为跟踪的状态,并提示用git add 命令将文件添加到跟踪项目中
2.跟踪新文件 / 将修改的文件添加到暂存区
git add *
(全部) / git add README
(指定文件):添加内容到下一次提交中(解决冲突也会用到)
$ git add README
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README
// 可以看到该文件处于跟踪状态,在Changes to be committed(等待提交的更改)中就是已经暂存的文件。
3.忽略文件
很多时候,希望某些文件被Git忽略(不能自动添加&不会显示在未被跟踪的列表下面),可以创建.gitignore文件
$ cat .gitignore //查看文件内容
*.[oa] //git忽略所有以.a/.o结尾的文件
* ~ //git忽略所有~结尾的文件
如下是.gitignore文件的例子
*.a #忽略.a类型的文件
!lib.a #仍然跟踪lib.a 文件,即使上一行指令要忽略.a类型的文件
/TODO #只忽略当前目录下的TODO文件,而不忽略子目录下的TODO
build/ #忽略build/目录下的所有文件
doc/*.txt #忽略doc/notes.txt,而不忽略doc/sever/arch.txt
doc/**/*.pdf #忽略doc目录下所有的pdf文件
https://github.com/github/gitignore:有多种参考示例列表
4.查看已暂存和未暂存的变更
git diff
:查看具体(删除/添加/修改行) ->只对未暂存的内容起作用
这条命令会将工作目录(本地)的内容与暂存区的内容进行对比。
// 将README文件添加一行内容:‘新添行’
$ git diff
diff --git a/README b/README
index 065bcad..701c8a9 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
my project
+新添行
\ No newline at end of file
git diff --staged
/ git diff --cached
这条命令会将暂存区与上一次提交的内容做比较.
5.提交变更
git commit
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
# new file: .gitignore
# new file: README
#
# Changes not staged for commit:
# modified: README
git commit -m '提交信息'
[master (root-commit) 0fcdd63] init project
2 files changed, 2 insertions(+)
create mode 100644 .gitignore
create mode 100644 README
6.跳过暂存区
git commit -a -m '添加并且提交'
可以让Git自动把已跟踪的所有文件添加到暂存区,然后在提交。
7.移除文件
git rm README
\ rm README
+ git add
删除文件并且提交到暂存区
git rm --cached README
: 文件保存在工作目录(本地),但不想让Git对其进行跟踪管理。
重命名
git mv README.md README
$ mv README.md README
$ git rm README.md
$ git add README
8.查看历史提交
git log
默认不加参数的情况下,git log会按照时间顺序列出仓库的所有提交,其中最新的提交在最前面。
git log -p -2
-2:只输出最近的两次提交
-p: 会输出每次提交引起的差异
git log --stat
stat:查看每个提交的简要统计信息
git log--pretty=oneline
: 每一行中只显示一个提交
等等。。。
提交历史的输出范围
git log --since=2.weeks
这条命令可以使用不同的时间形式,比如像‘2008-01-15’这样的某个具体日期,或者类似‘2 years 1 day 3 minutes ago’这样的相对时间。
git log --author=xx
:只查找某位作者的提交。
git log --grep=xx
:搜索提交信息中的关键字
--all-match
:同时指定author和grep选项,则需要添加--all-match参数。
git log -Sfunction_name
:-S只输出添加或者删除指定字符串的提交,举个栗子,查找某个特定函数引用的最近一次的提交,即可执行该命令。
9.撤销操作
git commit --amend
:使用场景栗子:某次提交之后发现自己忘记添加了某些文件,或者写错了提交信息,想要重新尝试提交。
上述命令会提交暂存区的内容,如果你在上次提交之后没有做出任何改动(提交完成之后,立即进行撤销),即可改动提交信息。
撤销已暂存的文件
git reset HEAD README.md
:可以将文件重置到已更改但未暂存的状态。
撤销对文件的修改
git checkout --README.md
:恢复文件到上次提交的状态
10.远程仓库的使用
显示远程仓库git remote
$ git remote // 显示设置了哪些远程仓库
origin
$ git remote -v //会显示出Git存储的每个远程仓库对应的URL
origin https://github.com/xxgit-demo.git (fetch)
origin https://github.com/xx/git-demo.git (push)
添加远程仓库git remote add [shortname] [url]
$ git remote add pb https://github.com/paulboone/ticgit
// 使用失败
从远程仓库获取和拉取数据git fetch [remote-name]
从远程仓库中获取本地仓库中没有的数据。在本地引用远程仓库包含的所有分支,并可以在任何时候合并和检查这些分支:git fetch origin
将数据推送到远程仓库git push [remote-name] [branch-name]
git push origin master
:origin& master是git的默认参数。
检查远程仓库git remote show[remote-name]
git remote show origin
:列出了所有远程仓库的URL地址以及每个分支的跟踪信息
删除和重命名远程仓库
git remote rename pb paul
将远程仓库名称由pb重命名为paul
$ git remote rename pb paul
$ git remote
// 该操作也会同时更改远程分支的名字
git remote rm pb
:删除名为pb的远程仓库
查看标签
git tag
:列举标签
git tag -l 'v1.8.5'
:只查看1.8.5系列的版本
git show v1.4
产看标签数据以及对应的提交。
创建标签
- 轻量标签:指向某次提交的指针
- 注释标签:回作为完整的对象存储在Git数据库中,会有标签的详细信息。
创建注释标签:git tag -a v1.4 -m 'my version 1.4'
-m指定了标记信息,会伴随标签一起被存储
创建轻量标签:git tag v1.4-lw
补加标签
如果忘记给某次提交添加标签,执行git tag -a v1.2 9fceb02
即可
$git log //查看提交历史,看到对应需要补加标签的版本号
$git tag -a v1.2 9fceb02 // 在标签后面添加版本号,就会在对应的版本号中添加上标签
$ git tag //查看标签列表
$git show v1.2 // 查看对应标签的准确提交信息。
共享标签/推送标签
默认情况下,git push 命令不会吧标签传输到远程服务器上,在创建了标签之后,必须明确的推送到共享服务器上,类似于推送分支git push origin [tagname]
$ git push origin v1.5
推送多个标签git push origin --tags
检出标签
11.其他操作
- 检查配置:
git config --list
orgit config user.name
- 获取帮助:
git help
- 克隆项目:
git clone https://github.com/xxx/stickHero.git
- 查看状态:
git status
- 查看具体(删除/添加/修改行):
git diff
- 跟踪文件/添加文件:
git add *
(全部) /git add README
(指定文件) - 提交变更:
git commit
/git commit -m '提交注释'
- 添加并且提交:
git commit -a -m '添加并且提交'
- 移除文件:
rm 文件路径
/git rm 文件
- 查看历史提交:
git log
- 撤销提交操作/更改提交信息:
git commit --amend
- 撤销已暂存的文件:
git reset HEAD README.md
- 撤销对文件的修改:
git checkout --README.md
- 从远程仓库获取和拉取数据:
git fetch [remote-name]
- 拉取代码&合并代码:
git pull
- 将数据推送到远程仓库:
git push origin master
- 检查远程仓库:
git remote show[remote-name]
- 删除和重命名远程仓库:
git remote rename pb paul
&git remote rm pb
- 查看标签: 标签列表
git tag
&git tag -l 'v1.8.5'
某个标签详细提交信息git show v1.4
- 创建标签:
git tag v1.4
&git tag -a v1.4 -m 'my version 1.4'
- 推送标签: 具体某个
git push origin v1.1
多个git push origin --tags
*提交变更输入注释:'git commit' ->输入message ->esc键 ->shift键+:键->wq
(如果输入message的时候出现问题 ->esc键 + u键(unset))
- ll -a :(可以看到操作人员信息)
网友评论