Git学习使用笔记

  1. 下载地址
  2. idea设置
  3. 创建本地仓库
  4. 添加用户
  5. 添加文件
  6. 提交文件
  7. 查看提交日志
  8. 回退指定版本
  9. 删除
  10. 查看当前文件与暂存区的差别
  11. 标签
  12. 分支(可以理解为主树干生出的树支)
  13. 分支合并
  14. 与远程仓库操作 -- github
  15. 撤销操作

下载地址

地址:
https://git-scm.com/downloads 
选择windows下载并安装

idea设置

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 +0800

myTag1

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

在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

猜你喜欢

转载自blog.csdn.net/u013845177/article/details/82563194