git常用命令

题外话:

本人个人博客www.kurby.top 欢迎访问。以后博客都会同步到个人博客和CSDN上,CSDN只作为技术的分享,个人博客会多一些内容,当做我个人的小屋。如有兴趣,欢迎访问。

廖雪峰‘s Git

文章目录

    • 题外话:
  • 廖雪峰‘s Git
    • Git的诞生
    • Git的安装
    • 上传文件放到Git仓库
      • git add && git commit
      • git status
      • git diff
      • git log
      • git reflog
      • git checkout --
      • git rm xxx
    • 远程仓库
      • 添加远程仓库
        • 查看是否成功
        • 另外:重新定义origin的路径
      • 从远程仓库克隆到本地
      • 分支管理
        • git checkout -b xxx 或 git switch -c xxx
        • git branch xxx
        • git branch -d XXX
        • git branch
        • git checkout xxx 或 git switch xxx
        • git merge
        • git log --graph
        • git merge --no-ff xxx
        • git stash
        • git remote
        • git pull
        • git checkout -b branchName origin/branchName
        • git log --graph --pretty=oneline --abbrev-commit
        • git rebase
        • git tag name
        • .gitignore
      • 设置别名

本人以后的博客转移到个人小站: https://www.kurby.top/ 本小站作为个人的生活、编程、胡思乱想等记录站点,欢迎大家来访问。

Git的诞生

先是因为CVS、SVN都是付费的,不符合开源精神,后来 BitKeeper 的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。 后来有个Linux的牛人把BitMove给破解了,所以LinuX无法免费使用了,Linus大佬用了两周时间用C写出了一个分布式的版本控制系统Git,此乃神人也~

Git的安装

Git下载,可以自己根据自己的操作系统选择,我为了方便用的是windows的,

安装完成后,运行git bash ,弹出一个命令行的东西,说明安装成功了。

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

创建版本库

创建一个文件夹、git init 把当前目录设置成Git可以管理的仓库:

$ mkdir learngit
$ cd learngit
$ git init

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

上传文件放到Git仓库

git add && git commit

第 一步,用命令git add告诉Git,把文件添加到仓库:

$ git add readme.txt

第二步,用命令git commit告诉Git,把文件提交到仓库:

git常用命令_第1张图片

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

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容:

Git is a distributed version control system.
Git is free software.

git status

现在,运行git status命令看看结果:

$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

	modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

git diff

虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.

git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。

知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步,第一步是git add

$ git add readme.txt

同样没有任何输出。在执行第二步git commit之前,我们再运行git status看看当前仓库的状态:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

	modified:   readme.txt

git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了:

$ git commit -m "add distributed"
[master e475afc] add distributed
 1 file changed, 1 insertion(+), 1 deletion(-)

提交后,我们再用git status命令看看仓库的当前状态:

$ git status
On branch master
nothing to commit, working tree clean

git log

查看版本控制的记录

git常用命令_第2张图片

git log --pretty=oneline 就查看一行有那些版本

上图中的(HEAD ->master)表示的就是当前使用的版本

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

想要回到add something 要用

git reset --hard HEAD^ 表示要回到上一个版本

git常用命令_第3张图片

图中可以看到版本变成了 add something 的版本了

但是要注意的是咱们执行git log 只有2个版本了,add lpl的版本不见了!咋办很慌啊?

git reflog

可以记录咱们的git reset 的所有操作 ,我们只有git reset --hard xxx 就行了。

git常用命令_第4张图片

git checkout –

撤销更改的文件。 注意: 这里和git checkout 不一样 有 –

可以撤销已经git add file和git checkout – file的文件回到之前的状态

注意: 还可以用 git reset HEAD readme.txt 功能和git checkout – 一样的。

git rm xxx

添加了一个文件到版本库之后,如果这个文件删除了,那么git status的时候就会显示这个文件已经删除了,如果不要这个文件了,可以 git rm xxx 从本地版本库中删除xxx文件。

git常用命令_第5张图片

https://www.liaoxuefeng.com/wiki/896043488029600/900002180232448 学到

远程仓库

添加远程仓库

自己在github上创建一个仓库

现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:

$ git remote add origin michaelliao/learngit.git

请千万注意,把上面的michaelliao替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

下一步,就可以把本地库的所有内容推送到远程库上:

$ git push -u origin master

问题

1、git有时候会报这样的问题

ERROR: Repository not found.fatal: Could not read from remote repository. Please make sure you have the correct access rightsand the repository exists.

解决方案是

git remote set-url命令修改remote URL

git remote set-url传递两个参数

  • remote name。例如,origin或者upstream
  • new remote url。例如,[email protected]:USERNAME/OTHERREPOSITORY.git
git remote set-url origin [email protected]:xxxxxx/xxxxxx.git

查看是否成功

$ git remote -v origin    
https:YourUserName/YatouTest00123.git (fetch)origin    https:YourUserName/YatouTest00123.git (push)

2、 可能是本地命令行 ping github.com ping不同 ,是DNS的问题,可以从别人的电脑复制一个过来

https://blog.csdn.net/jackli_git/article/details/72861546

另外:重新定义origin的路径

$ git remote set-url origin [email protected]:Kurby96/test.git

从远程仓库克隆到本地

$ git clone [email protected]:michaelliao/gitskills.git

注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了:

$ cd gitskills
$ ls
README.md

分支管理

git checkout -b xxx 或 git switch -c xxx

创建新的分支,然后切换到新分支

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

git branch xxx

创建xxx分支

git branch -d XXX

删除xxx分支

git branch

这个后面没有参数的就是查看当前所有的分支有什么, git branch命令会列出所有分支,当前分支前面会标一个*号。

git branch -d和git branch -D xxx

git checkout xxx 或 git switch xxx

切换到xxx分支

git merge

合并分支,这种是快进模式合并,速度快,并不是每次都能快速合并。

eg:先切换到master分支(也可以是其他分支)去,然后合并你想要合并的分支。

$ git checkout master
$ git merge dev  

git log --graph

命令可以看到分支合并图。

git merge --no-ff xxx

不用Fast forward模式进行合并分支。

git常用命令_第6张图片

上图的这种合并,就是--no-ff这种合并方式,一个项目从黑色字的master分支,迭代了2个版本到黑色head处,现在想要把黑色的head合并到master,而且还有保存黑字master的版本,就要用--no-ff这种合并方式。

git stash

我们更改了数据之后,如果想切换到另一个分支,就需要git add xx,然后git commit -m “xxxx”,先存一下,才能切换。

如果我们不想这么操作,可以用git stash,它会存到一个stash链表里,

$ git stash list    	 ----查看当前存储的东西

$ git stash apply  	---恢复stash内容不删除

$ git stash drop  	----删除

$ git stash pop    	-----恢复的同时,内容也清除

$ git stash apply stash@{0}    -----恢复指定的stash 括号内是list的顺序

git remote

查看远程分支的名称

git remote -v ---------查看远程仓库的信息

git pull

如果其他人在git push origin xxx ,而且此时你也在git push origin xxx,就会出错,因为远程的内容比你的新,这时你就可以用,git pull把最新的提交从origin/dev抓下来,然后本地合并,解决问题,再推送。

git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置devorigin/dev的链接:

$ git branch --set-upstream-to=origin/dev dev

再git pull,如果合并之后,可能会有问题,手动解决,然后再push。

git checkout -b branchName origin/branchName

在本地创建与远程一样的分支,

git checkout -b branchName则是在本地当前分支基础上创建分支。

git log --graph --pretty=oneline --abbrev-commit

查看分支结构。

git rebase

重新使git log --graph --pretty=oneline --abbrev-commit得到的分支变成一条直线。

git tag name

创建一个标签

git tag   		 -----打标签

git tag -a  -m "blablabla..."    -----可以指定标签信息
git tag                          ----查看标签信息
git tag -d v0.1                  ----删除标签
git push origin         -----推送标签到远程
git push origin --tags           ------推送本地所有标签到远程
如果标签已经推送到远程,要删除,需要从本地和远程分别删除
git tag -d v0.1					  --本地删除
git push origin :refs/tags/v0.1   --远程删除

.gitignore

忽略git的文件

如果文件被忽略了,可以使用git add -f xxx ,强制添加到git

git check-ignore -v xxx -----查看忽略的文件的规则

设置别名

$ git config --global alias.st status            ----其中st 是status的别名

h origin -----推送标签到远程
git push origin --tags ------推送本地所有标签到远程
如果标签已经推送到远程,要删除,需要从本地和远程分别删除
git tag -d v0.1 --本地删除
git push origin :refs/tags/v0.1 --远程删除




#### .gitignore

忽略git的文件

如果文件被忽略了,可以使用git add -f xxx ,强制添加到git

git check-ignore -v xxx    		 -----查看忽略的文件的规则

### 设置别名

```sh
$ git config --global alias.st status            ----其中st 是status的别名

本博客参考廖雪峰git教程:廖老师网站官网,非常感谢廖老师的分享。

你可能感兴趣的:(工具类)