- 下载地址
- idea设置
- 创建本地仓库
- 添加用户
- 添加文件
- 提交文件
- 查看提交日志
- 回退指定版本
- 删除
- 查看当前文件与暂存区的差别
- 标签
- 分支(可以理解为主树干生出的树支)
- 分支合并
- 与远程仓库操作 -- github
- 撤销操作
地址:
https://git-scm.com/downloads
选择windows下载并安装
idea设置termial像linux一样,而不是windows的cmd
假设目录是D:/m/test,在test目录下创建本地仓库,有两种方式
1、在test目录下执行:git init 即可
2、在m目录下执行命令时指定test目录: git init test
git config --global user.name 'ywj' (添加用户:ywj,global代表着所有操作将是这个用户操作的)
git config --global user.email '[email protected]' (添加用户的email)
添加文件只是添加到暂存区(什么是暂存区,参考:https://www.w3cschool.cn/git/git-workspace-index-repo.html)
1、先在test目录下添加0.txt,然后执行添加命令:git add 0.txt 即可。
2、添加完后可以查看状态:git status ,结果如下:-------------------------------------------------
$ git status
On branch master// 提交的分支是master
No commits yet
Changes to be committed:// 需要提交的改变文件
(use "git rm --cached <file>..." to unstage)
new file: 0.txt// 这个是要提交的文件-------------------------------------------------
在执行完add的命令后执行:git commit -m ‘描述说明:000000000’
效果如下:-------------------------------------------------
$ git commit -m ‘描述说明:000000000’
[master (root-commit) 63405e4] ‘描述说明:000000000’
1 file changed, 1 insertion(+)
create mode 100644 0.txt-------------------------------------------------
事后查看状态:git status-------------------------------------------------
$ git status
On branch master// 提交到了master分支的库上
nothing to commit, working tree clean// 没有要提交了-------------------------------------------------
(1)命令:git log ,效果如下:
-------------------------------------------------
$ git log
commit 87e6716445cb10a90721df6d85fc457ad4140dba (HEAD -> master)// 红色总价相当于这次提交的ID,(HEAD -> master)说明提交的是在master分支
Author: ywj <[email protected]> // 操作人
Date: Sun Aug 26 21:01:45 2018 +0800 // 操作时间描述说明:33333333// 描述内容
// 现在内容同上说明
commit b2ab1a804c1033414f4284f67de7c604664946f2
Author: ywj <[email protected]>
Date: Sun Aug 26 21:01:31 2018 +0800描述说明:2222222
commit 58575d2daa496f29ab6ffe44e81dae1752eba138
Author: ywj <[email protected]>
Date: Sun Aug 26 21:01:18 2018 +0800描述说明:11111111
commit 63405e4723f005243f29b08a4d55f7d071b53765
Author: ywj <[email protected]>
Date: Sun Aug 26 20:59:10 2018 +0800描述说明:000000000
-------------------------------------------------
(2)另一种查看日志命令:git log --oneline (相对简洁点)
-------------------------------------------------
87e6716 (HEAD -> master) 描述说明:33333333// 前面红色部分是git log 命令下得到的ID的前7位
b2ab1a8 描述说明:2222222
58575d2 描述说明:11111111
63405e4 描述说明:000000000-------------------------------------------------
(3)还有一种可以查看日志命令,有点图形化(不过目前只能单分支,看不出效果): git log --graph (不截图了,后面分支时会用到)
(4)查看指定文件的日志,如1.txt,执行:git log 1.txt
commit了好几次,但是想回去到某一次的内容,先通过git log --oneline获取前7位数字或字母的id,再执行git checkout 7位内容 即可
如:当前0.txt内容是:
000000000
111111111
222222222
333333333
先执行: git log --oneline-------------------------------------------------
git log --oneline
87e6716 (HEAD -> master) 描述说明:33333333
b2ab1a8 描述说明:2222222
58575d2 描述说明:11111111
63405e4 描述说明:000000000-------------------------------------------------
要回到 描述说明:1111111,只要执行 git checkout 58575d2 即可,此时0.txt内容自己会变成
000000000
111111111
(1)删除暂存区的(执行的add命令后发再add错了,要删除):执行:git rm --cached 文件名,如:git rm --cached 0.txt
(2)删除暂存区和本地工作区的:执行git rm 文件名,然后commit,如:git rm 0.txt 之后接着 git commit -m ‘xxx’
(3)还原删除文件: 在执行 git rm 0.txt 后,还没commit时可以使用命令还原,第一步,执行:git reset HEAD 0.txt 第二步:执行git checkout 0.txt,即可
命令:git diff 1.txt (1.txtj是要对比差别的文件)
查看暂存区与版本库的差别
命令:git diff --cached 1.txt
(1)在执行完commit命令后,执行:git tag -a myTag1 -m 'myTag1' (其中-a后面的myTag1 是标签名)
(2)查看所有标签:git tag
(3)查看tag信息:在通过git tag命令后显示所有标签,然后取出想要的标签名,执行:git show 标签名,如:
-------------------------------------------------
$ git show myTag1
tag myTag1
Tagger: ywj <[email protected]>
Date: Sun Sep 9 12:53:41 2018 +0800myTag1
commit 0c1ed09a91d361e7c624b53bcdc5b45a1e391ce5 (HEAD -> master, tag: myTag1)
Author: ywj <[email protected]>
Date: Sun Sep 9 12:52:55 2018 +0800
commit_with_1-------------------------------------------------
(4)给历史版本加上标签:通过git log --oneline找出提交的历史版本:
-------------------------------------------------
$ git log --oneline
c8b4cc9 (HEAD -> master) commit3
35a6e7d commit2
0c1ed09 (tag: myTag1) commit_with_1
815fd80 (tag: tag0) commit-0-------------------------------------------------
可以看出c8b4cc9 和 35a6e7d 没有标签,可以执行$ git tag -a myTag2 -m 'mmTag2' 35a6e7d(给35a6e7d 版本加上标签), 执行完查看效果:-------------------------------------------------
$ git log --oneline
c8b4cc9 (HEAD -> master) commit3
35a6e7d (tag: myTag2) commit2 ---------加上了
0c1ed09 (tag: myTag1) commit_with_1
815fd80 (tag: tag0) commit-0-------------------------------------------------
根据tag回滚指定版本:git checkout 标签名;如$ git checkout myTag2
1、查看所有分支:git branch
2、创建分支:git branch 分支名 ;如git branch fenzhi1
3、查看当前分支:git log --oneline
-------------------------------------------------$ git log --oneline
2d9441e (HEAD -> master) s// HEAD指向master,说明当前分支在master-------------------------------------------------
4、切换分支:git checkout 分支名;如:git checkout fenzhi1
如上图,创建一个文件ywjtxt.在master分支时,
版本1的ywj.txt的内容是1,然后add、commit
版本2的ywj.txt的内容是 1 \n 2,然后add、commit
版本3的ywj.txt的内容是 1 \n 2 \n 3,然后add、commit
版本4的ywj.txt的内容是 1 \n 2 \n 3 \n 4,然后add、commit查看历史:
-------------------------------------------------
$ git log --oneline
b200865 (HEAD -> master) m4
ec009c1 m3
a2a110a m2
07d9a71 m1-------------------------------------------------
此时ywj.txt是:如下图
假设在master版本3时有个东西漏了要补,这时在master分支版本3那里分出一个分支。先checkout回版本3
执行:git checkout ec009c1 回到版本3(此时ywj.txt没有”4”) ,执行:git branch fz1 创建分支fz1
查看分支是否创建成功:
-------------------------------------------------
$ git branch
* (HEAD detached at ec009c1)
fenzhi1
fz1 // look ,创建成功
master
-------------------------------------------------
接着切换分支:执行 git checkout fz1(fz1是上一步创建的分支名)
查看分支是否切换成功,执行:git log --oneline 得出下面结果,看到HEAD指向fz1,说明OK了
-------------------------------------------------
$ git log --oneline
ec009c1 (HEAD -> fz1) m3
a2a110a m2
07d9a71 m1
-------------------------------------------------
继续在ywj.txt添加fz3.1 ,然后add、commit,,再来一次添加fz3.2 ,然后add、commit
最终效果:
-------------------------------------------------
$ git log --oneline
8ed6ce2 (HEAD -> fz1) fz3.2
b684d05 fz3.1
-------------------------------------------------
切换回master分支,创建版本5,版本5上ywj.txt加入5,然后add、commit
-------------------------------------------------
$ git checkout master
$ git log --oneline
4d304c1 (HEAD -> master) 5
b200865 m4
ec009c1 m3
a2a110a m2
07d9a71 m1
-------------------------------------------------
开始合并,开始合并,开始合并.把分支fz1合并到master版本5中
在master这个分支下执行:git merge fz1 ,但是有冲突了
-------------------------------------------------
Auto-merging ywj.txt
CONFLICT (content): Merge conflict in ywj.txt// Look
Automatic merge failed; fix conflicts and then commit the result.
-------------------------------------------------
此时ywj.txt内容如下
1
2
3
<<<<<<< HEAD
4
5
=======
fz3.1
fz3.2>>>>>>> fz1
-------------------------------------------------
其中:从<<<<<<< HEAD 到 ======= 是当前master的内容,从=======到>>>>>>> fz1是分支fz1的内容,此时手动修改ywj.txt(怎么改按实际需求),我就改成下面那样
-------------------------------------------------
1
2
3
fz3.1
fz3.2
4
5-------------------------------------------------
然后add、commit就行了。如果没冲突,直接add、commit
在github添加一个仓库:如https://github.com/woshiyinweijian/testGit.git
执行命令:git remote add github https://github.com/woshiyinweijian/test.git 即可完成连接
查看远程仓库信息:git remote -v 效果如下 :
-------------------------------------------------
github https://github.com/woshiyinweijian/test.git (fetch) // 下载文件地址
github https://github.com/woshiyinweijian/test.git (push) // 上传文件地址
-------------------------------------------------
上传文件:git push -u github master
上传完毕后刷新刚才的仓库地址 https://github.com/woshiyinweijian/test.git 即可看到已上传,如下图
下载文件:cd到指定目录,执行:git clone https://github.com/woshiyinweijian/test.git 即可,
或者指定目录下下载,如:git clone https://github.com/woshiyinweijian/test.git myfolder
如果执行clone命令之后,然后别人更新一些新文件上去,想更新下载新文件,执行:git pull命令即可
注意:clone之后 查看一个远程信息
-------------------------------------------------
$ git remote -v
origin https://github.com/woshiyinweijian/test.git (fetch)
origin https://github.com/woshiyinweijian/test.git (push)
-------------------------------------------------
发现前面是origin, 不再是github,这里提交文件里不再是git push -u github master 而是git push -u origin master
多个使用冲突:多个人使用push时,可能会冲突,比如A改了文件push, B也文件push,这时B会报错,如:
-------------------------------------------------
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/woshiyinweijian/test.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
-------------------------------------------------
这时B只能先pull下来处理,执行:git pull, 如:
$ git pull // 这个pull = fetch + merge ,即下载+合并
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/woshiyinweijian/test
05b6dab..8770023 master -> origin/master
Auto-merging 0.txt
CONFLICT (content): Merge conflict in 0.txt
Automatic merge failed; fix conflicts and then commit the result.
文件会出现如下图现象:
<<<<<<< HEAD 到 =========是B的, ======= 到 >>>>>>> 877002322a34bb434095270796c6bf6b1c1cdbde是上A的,877002322a34bb434095270796c6bf6b1c1cdbde是历史日记里的长长id来着,最后根据自己的需求修改好文件后add、commit、push即可
pull指定文件:
git fetch origin
git checkout origin/master -- 000.txt ,其中000.txt是在github上的文件位置
---------------------------------------------------------------
1、改变最近一次提交
假设原来有2个文件:ywj.txt 和 code.txt。一开始提交了ywj.txt, 发现少提交了 code.txt,按平时操作是再add 、commit code.txt文件,这时会生成新的commit信息(此时两条commit信息,一条是ywj.txt,另一条是code.txt),但是不想这样子搞,想把提交code.txt文件提交信息和ywj.txt提交信息合在一块,尝试重新提交,相当于一开始一起提交了ywj.txt和code.txt,这样子commit信息只有一条。此时可以用git commit --amend命令搞定
按流程走,先add 、commit ywj.txt
---------------------------------------------------------------
$ git add ywj.txt
---------------------------------------------------------------
提交ywj.txt描述信息
---------------------------------------------------------------
$ git commit -m 'ywj'
---------------------------------------------------------------
突然忘记了添加提交code.txt,补上code.txt,先add先
---------------------------------------------------------------
$ git add code.txt
---------------------------------------------------------------
接着尝试重新提交
---------------------------------------------------------------
$ git commit --amend
---------------------------------------------------------------
此时如下图
可以看到上一次提交的信息,其中描述信息是ywj,然后点击键盘i(不点输入不了), 就可以输入了,把ywj改成ywj+code,完成后点击键盘Esc,接着点键盘:(两个点) ,接着点键盘W,键盘P即可保存退出。
查看提交日志:
$ git log --oneline
e638916 (HEAD -> master) ywj + code
看见了信息提交信息变了。
如果commit ywj.txt后只想改提交的描述信息,这时直接执行git commit --amend进行相同操作即可。
2、取消add操作
有时候add后发现add错了,要取消怎么办,用先使用命令git status查看可以操作的命令,如先add一个1.txt文件,后悔了,执行git status
---------------------------------------------------------------
$ git status
On branch master
Your branch is ahead of 'github/master' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: 1.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
../../.idea/
---------------------------------------------------------------
看到了一行
Changes to be committed: // 需要commit提交的文件
(use "git reset HEAD <file>..." to unstage),谷歌翻译是”使用’git reset HEAD <file>...’取消演出(也就是取消在暂存区里的保存)”,
new file: 1.txt // 暂存区里的1.txt
按提示执行命令:git reset HEAD 1.txt 即可取消add操作了
之后执行:git status
---------------------------------------------------------------
$ git status
On branch master
Your branch is ahead of 'github/master' by 1 commit.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
../../.idea/
1.txt
nothing added to commit but untracked files present (use "git add" to track)
---------------------------------------------------------------
暂存区里的1.txt没了。
3、撤销内容修改
比如1.txt的里面的内容是1,然后添加提交了,接着修改1.txt的内容为123456,由于某种原因,想还原回去(还原到内容为1的状态下),执行git status查看提示:
---------------------------------------------------------------
$ git status
On branch master
Your branch is ahead of 'github/master' by 2 commits.
(use "git push" to publish your local commits)
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: 1.txt
---------------------------------------------------------------
核心句子:
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: 1.txt // 修改了的文件
按提示 ,执行:git checkout -- 1.txt,就可以还原了。
更多参考:https://git-scm.com/book/zh/v1