git init
hxhaaj@DESKTOP-CP80SC0 MINGW64 /d/code/GitSpace/testGit (master)
$ git init
Initialized empty Git repository in D:/code/GitSpace/testGit/.git/
Initialized empty Git repository in D:/code/GitSpace/testGit/.git/
使用命令ll -la
显示所有含有隐藏目录.git
查看.git/
目录下的目录结构:
$ ll
total 7
-rw-r--r-- 1 hxhaaj 197121 130 6月 22 17:12 config
-rw-r--r-- 1 hxhaaj 197121 73 6月 22 17:12 description
-rw-r--r-- 1 hxhaaj 197121 23 6月 22 17:12 HEAD
drwxr-xr-x 1 hxhaaj 197121 0 6月 22 17:12 hooks/
drwxr-xr-x 1 hxhaaj 197121 0 6月 22 17:12 info/
drwxr-xr-x 1 hxhaaj 197121 0 6月 22 17:12 objects/
drwxr-xr-x 1 hxhaaj 197121 0 6月 22 17:12 refs/
仅仅在当前本地库范围内有效
命令:git config user.name xxx
设置项目级用户名称
命令:git config user.email xxx
设置项目级用户email
信息保存在 .git/config
文件中
登录当前操作系统的用户范围
命令:git config --global user.name xxx
设置系统用户级用户名称
命令:git config --global user.email xxx
设置系统用户级用户email
签名信息保存在 系统用户目录下的 ~/.gitconfig
文件中
$ cat .gitconfig
[user]
name = hxhaaj_glb
email = hxhaaj_glb@163.com
项目级别
优先于系统用户级别,二者都有时采用项目级别
的签名命令: git status
查看工作区、暂存区状态
$ git status
On branch master
No commits yet
Untracked files:
(use "git add ..." to include in what will be committed)
t1.txt
nothing added to commit but untracked files present (use "git add" to track)
git add [file name]
将工作区的新建或者修改
后的文件添加到暂存区
$ git add t1.txt
执行后,查看状态:
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached ..." to unstage)
new file: t1.txt
git rm --cache [filename]
将暂存区
中的文件,移除暂存区,避免误添加操作
$ git rm --cached t1.txt
rm 't1.txt'
删除后,回到原状态:查看状态:
$ git status
On branch master
No commits yet
Untracked files:
(use "git add ..." to include in what will be committed)
t1.txt
nothing added to commit but untracked files present (use "git add" to track)
命令: git commit
将暂存区的内容提交到本地库
git commit -m "xxx提交提示信息" [文件名]
$ git commit -m "new file t1 and insert some .." t1.txt
warning: LF will be replaced by CRLF in t1.txt.
The file will have its original line endings in your working directory.
[master b4b7b3e] new file t1 and insert some ..
1 file changed, 3 insertions(+)
git log
最完整的形式
$ git log
commit b4b7b3ecb73218f06a882363ea8982e78aea59b6 (HEAD -> master)
Author: hxhaaj @163.com>
Date: Fri Jun 22 22:33:57 2018 +0800
new file t1 and insert some ..
commit 55afec262bc7db58f8307f788dc57f3118e0d3d1
Author: hxhaaj @163.com>
Date: Fri Jun 22 22:28:49 2018 +0800
new t1`
git log --pretty=oneline
以一条信息一行的简洁状态显示日志
$ git log --pretty=oneline
b4b7b3ecb73218f06a882363ea8982e78aea59b6 (HEAD -> master) new file t1 and insert some ..
55afec262bc7db58f8307f788dc57f3118e0d3d1 new t1`
git log --oneline
哈希值简短显示的简洁状态 更简洁 只显示过去版本
$ git log --oneline
b4b7b3e (HEAD -> master) new file t1 and insert some ..
55afec2 new t1`
git reflog
增加了头指针移动次数信息 HEAD@{x} x为移动到当前版本需要的次数 常用,新老版本都能全部显示
$ git reflog
b4b7b3e (HEAD -> master) HEAD@{0}: commit: new file t1 and insert some ..
55afec2 HEAD@{1}: commit (initial): new t1`
多屏显示控制方式:
空格向下翻页
b向上翻页
q退出
b4b7b3e (HEAD -> master) HEAD@{0}: commit: new file t1 and insert some ..
55afec2 HEAD@{1}: commit (initial): new t1`
git reset --hard [局部索引值(55afec2)]
$ git reset --hard 55afec2
HEAD is now at 55afec2 new t1`
此时回到了55afec2这个版本,再使用 git reflog
查看日志
$ git reflog
55afec2 (HEAD -> master) HEAD@{0}: reset: moving to 55afec2
b4b7b3e HEAD@{1}: commit: new file t1 and insert some ..
55afec2 (HEAD -> master) HEAD@{2}: commit (initial): new t1`
git reset --hard HEAD[^]
n个^符号,退n个版本
$ git reset --hard HEAD^
HEAD is now at 55afec2 new t1`
git reset --hard HEAD~n
n代表后退多少步,同样也只能后退--soft
参数 --mixed
参数 --hard
参数 git reset --hard [指针位置]
git diff [文件名]
不带参数,将工作区中的文件和暂存区进行比较
git diff[本地库中历史版本] [文件名]
将工作区中的文件和本地库历史记录进行比较
git diff HEAD t1.txt
git diff HEAD^ t1.txt
不指定文件名,比较多个文件
创建分支
git branch [分支名]
查看分支
git branch -v
切换分支
git checkout [分支名]
合并分支
第一步:切换到接受修改的分支(被合并的,增加新内容的分支)上
git checkout [被合并分支名]
第二步:执行merge命令
git merge [有新内容的分支名]
解决冲突
git add [文件名]
git commit -m "日志信息"
哈希是一系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:
- 不管输入数据的数据量有多大,输入同一个哈希算法,得到加密结果长度固定。
- 哈希算法确定,输入数据确定,输出数据能够保证不变。
- 哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
- 哈希算法是不可逆的
- Git底层采用的是SHA-1算法。
- 哈希算法常常被用来验证文件的完整性,确定性。
- Git底层就是根据这种验证机制保证了数据的完整性。
以文件变更列表的方式存储信息。这类系统将他们保存的信息看做是一组基本文件和每个文件随时间逐步累积的差异。
Git把数据看做是小型文件系统的
一组快照
。每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引
。为了高效,如果文件没有修改
,Git不再重新存储该文件
,而是只保留一个链指向之前存储的文件
。所以Git的工作方式可以称之为快照流
。
实质上是指针指向的对象变了,改变指针的指向,快速做到切换。
此时开始有了分支,都基于f30ab版本
所有操作都是基于链条指针的移动和切换。
git remote add [别名] [仓库地址]
$ git remote add git_note https://github.com/hxhaaj/Git_note.git
git remote -v
$ git remote -v
git_note https://github.com/hxhaaj/Git_note.git (fetch)
git_note https://github.com/hxhaaj/Git_note.git (push)
git push [仓库地址别名] [创建的分支名]
测试后,弹出登陆窗口,登陆后显示提交进度。
$ git push git_note master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (20/20), 829.22 KiB | 12.02 MiB/s, done.
Total 20 (delta 0), reused 0 (delta 0)
To https://github.com/hxhaaj/Git_note.git
* [new branch] master -> master
git clone [远程库地址]
$ git clone https://github.com/hxhaaj/Git_note.git
Cloning into 'Git_note'...
remote: Counting objects: 23, done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 23 (delta 1), reused 19 (delta 0), pack-reused 0
Unpacking objects: 100% (23/23), done.
git fetch [远程库地址别名][远程分支名]
$ git fetch git_note master
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 2), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (6/6), done.
From https://github.com/hxhaaj/Git_note
* branch master -> FETCH_HEAD
8228eff..aeda745 master -> git_note/master
git merge [远程库地址别名]/[远程分支名]
$ git merge git_note/master
Updating 8228eff..aeda745
Fast-forward
Git.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 64 insertions(+), 15 deletions(-)
git pull [远程库地址别名] [远程分支名]
注意点:
1. 如果不是
基于GitHub远程库的最新版本
所做的修改,不能进行push推送
,必须先进行pull操作
拉取下来。
2. 拉取下来后如果进入冲突状态,则先解决冲突
,去掉冲突标记,选用合适的内容,冲突解决后才能push操作
。
在他人的远程库地址上点击fork,就可以fork到自己的远程库上
在自己的远程库上,使用git中的git clone [远程库地址]
操作,克隆到自己的本地库
自己在本地进行修改,push推送到远程库中
在远程库的项目中找到 并点击 pull requests
-> new pull requests
-> create pull request
,然后发送该pull request的信息 ,此时在被fork的原始项目中的 pull requests
一栏中就可以看到pull request的信息,并可以进行对话。
合并代码,在对话框中就可以点击 merge pull request
进行合并,点击之后填写合并信息
被fork的用户就可以将已经更新修改的远程库就可以拉取到本地
ssh-keygen -t rsa -C [将要的登陆用户的邮箱]
执行后会生成SSH目录 .ssh/
在.ssh/
目录下 ,cat id_rsa.pub
获取该id的SSH-RSA的公钥复制到GitHub上的SSH Keys中
在GitHub上添加SSH key
4. 新建使用SSH连接的远程地址别名
git remote add [别名] [ssh方式的连接地址]
.classpath
.project
.settings
target
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
[core]
excludesfile = C:/Users/hxhaaj/Java.gitignore
Java.gitignore文件路径
信息,同时,路径分割符必须为正斜线'/',不能为反斜线'\'
。