Git学习笔记

本文最后更新于:2022年5月29日 上午

廖雪峰Git教程

基础环境

ubuntu 16.04 x86_64

1,安装Git

1
sudo apt-get install git

2,创建版本库

1)选择一个合适的地方,创建一个空目录:

1
2
mkdir learngit
cd learngit

2)通过git init命令把这个目录变成Git可以管理的仓库:

1
git init

初始化空的 Git 仓库于 /home/yun/learngit/.git/

3,把文件添加到版本库

  • 初始化一个Git仓库,使用git init命令。
  • 添加文件到Git仓库,分两步:
    1、使用命令git add filename,注意,可反复多次使用,添加多个文件;
    2、使用命令git commit -m "message",完成。

1)编写一个readme.txt文件,内容如下:

1
2
Git is a version control system.
Git is free software.

注意事项
一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

2)用命令git add告诉Git,把文件添加到仓库:

1
git add readme.txt

3)用命令git commit告诉Git,把文件提交到仓库:

1
git commit -m "wrote a readme file"

显示以下信息:

1
2
3
[master (根提交) 00f3e3e] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt

git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

注意事项
如果运行git commit出现如下提示:

1
2
3
4
5
6
7
8
9
*** Please tell me who you are.

Run

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

请按照提示运行命令设置你的身份信息。

要随时掌握工作区的状态,使用git status命令。

如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

版本回退

Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD filename,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考 版本回退 一节,不过前提是没有推送到远程库。

1)修改了文件,还没有提交.

1
git checkout -- readme.txt

命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。

2)如果git add到暂存区了,用git status查看一下,发现修改只是添加到了暂存区,还没有提交。

1
2
3
4
5
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

modified: readme.txt

提示可以用命令git reset HEAD 可以把暂存区的修改撤销掉,重新放回工作区:

1
git reset HEAD readme.txt
1
2
Unstaged changes after reset:
M readme.txt

删除文件

1
git rm filename -f

(使用 –cached 保留本地文件,或用 -f 强制删除)

创建远程仓库

1)请先自行注册GitHub账号

2)创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell创建SSH Key:

1
ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

3)登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

添加远程库

1)首先,登陆GitHub,然后,点击右上角”+”目录找到“New repository”选项,创建一个新的仓库;

2)在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库;

3)根据GitHub的提示,在本地的learngit仓库下运行命令,把本地仓库的内容推送到GitHub仓库:

1
git remote add origin https://github.com/Magicalsoso/learngit.git

(删除远程库:git remote rm origin

4)把本地库的所有内容推送到远程库上:

1
git push -u origin master

从远程库克隆

1)登陆GitHub,创建一个新的仓库,名字叫gitskills。勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。

2)用命令git clone克隆一个本地库:

1
git clone git@github.com:Magicalsoso/gitskills.git

创建与合并分支

  • 查看分支:git branch
  • 创建分支:git branch name
  • 切换分支:git checkout name
  • 创建+切换分支:git checkout -b name
  • 合并某分支到当前分支:git merge name
  • 删除分支:git branch -d name
  • 如果要丢弃一个没有被合并过的分支,可以强行删除:git branch -D name
  • 合并分支时可以使用–no-ff参数,表示禁用Fast forward:git merge --no-ff -m "message" name
    此指令合并要创建一个新的commit,所以加上-m参数,把commit描述写进去

1)创建dev分支,然后切换到dev分支:

1
git checkout -b dev

2)用git branch命令查看当前分支:

1
git branch

3)修改文件,然后提交:

1
2
git add README.md 
git commit -m "branch test"

4)dev分支的工作完成,切换回master分支:

1
git checkout master

5)把dev分支的工作成果合并到master分支上:

1
git merge dev

6)合并完成后,就可以放心地删除dev分支了:

1
git branch -d dev

7)删除后,查看branch,就只剩下master分支了:

1
2
git branch
* master

保存和恢复分支工作现场

Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

1
git stash

完成其他工作后,回到dev分支:

1
git checkout dev

使用下面命令查看:

1
git stash list

恢复:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了。

如果你多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

1
git stash apply stash@{0}

Git学习笔记
https://kevinloongc.github.io/posts/a91eaa72.html
作者
Kevin Loongc
发布于
2019年4月20日
许可协议