Git超详细常用命令

Git是目前世界上最先进的分布式版本控制系统。

创建仓库(Repository)

一般的在实际项目中创建仓库有一个简单的方法:
在一个自己需要的目录下

$ git clone https://github.com/Stupidbird836/designPattern.git

到目录下查看

同时我们到该文件夹下

$ cd designPattern/
$ git remote -v
origin  https://github.com/Stupidbird836/designPattern.git (fetch)
origin  https://github.com/Stupidbird836/designPattern.git (push)


那么我们在实际项目之外的时候应该怎么创建一个仓库呢?

到一个目录下

$ cd ..
$ mkdir gitinit
$ cd gitinit/
$ git init
Initialized empty Git repository in E:/git/gitinit/.git/

当前目录下还有生成一个.git的隐藏文件夹,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了

在这里插入图片描述

到这里,我们的一个简单的仓库已经创建完成了

搞点事情

下面我们在仓库里面做一些事情
创建一个write.txt
写一些东西

查看是否有文件未提交
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    write.txt

nothing added to commit but untracked files present (use "git add" to track)

在这里插入图片描述

提交到暂存区
$ git add .
提交到仓库
$ git commit -m "write something"

在这里插入图片描述

创建远程仓库
$ git remote add origin 远程地址
提交到远程仓库
$ git push origin master

这里需要注意一下:你add的是你需要push 后面的名字(暂且这样解释)
比如:$ git remote add aaaa 远程地址
$ git push aaaa master

在这里插入图片描述

一个正常的没有错误的提交逻辑大约是:

查看有没有需要提交的文件
$ git status
添加到暂存
$ git add .
或者添加一个文件到暂存
$ git add 具体的文件名
提交到本地仓库
$ git commit -m "提交描述"
这里其实就可push,但是你不能保证在你操作的期间别人有没有在该分支做过提交所以最好先
$ git pull origin 分支名
如果有冲突,就先解决冲突,然后从第一条命令开始
没有冲突那就提交到远程
$ git push origin 分支名

但是谁都不能保证每次都能顺利进行


版本回退

对write.txt文件进行修改,增加一行

内容为two line.

$ git status
On branch master
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:   write.txt

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

$ git add .

$ git commit -m "two line"
[master 56cb32a] two line
1 file changed, 2 insertions(+), 1 deletion(-)

在这里插入图片描述

想回退你就得知道你的提交日志

$ git log
commit 56cb32a525480cb6612d152c927a027834e90f7c (HEAD -> master)
Author: huchenfei <huchenfei@chunbo.com>
Date:   Wed Jan 9 17:00:05 2019 +0800

    two line

commit 5ba4de5ad731fae4eb0b2fdfabcb69fc59862e64
Author: huchenfei <huchenfei@chunbo.com>
Date:   Wed Jan 9 16:43:45 2019 +0800

    write something

现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,这里有两种命令可以选择

git reset --hard HEAD^

那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。但是弊端很明显,10次,50次之前的怎们办呢?

git reset --hard HEAD~100

该命令可以直接回退到100次之前

开始回退
$ git reset --hard HEAD^
HEAD is now at 5ba4de5 write something

huchenfei@PEK1-3VSRW22 MINGW64 /E/git/gitinit (master)
$ cat write.txt
one line

只有最开始的 one line,第二次的two line已经被回退了

在这里插入图片描述

你可能发现了,这个日志太可怕了,有种总有***民想害朕的即视感。我的回退记录没有,这可怎么办呢?

别急

$ git reflog
5ba4de5 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
56cb32a HEAD@{1}: commit: two line
5ba4de5 (HEAD -> master) HEAD@{2}: commit (initial): write something

***民无处遁新

在这里插入图片描述

回退错了,我不想回退了怎么办。

看上面,不是已经把提交的版本号打出来了吗 56cb32a,是我们提交two line的版本号

$ git reset --hard 56cb32a

在这里插入图片描述

Git撤销修改和删除文件操作

天有不测风云,人有旦夕祸福,我正在奋笔疾书的写代码,突然我发现我写错位置了,但是改动的地方有很多,我没办法一点一点的删除修改的地方,怎么办??
在write.txt中加入three line

$ git status
On branch master
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:   write.txt

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

$ git checkout -- write.txt
-- 很重要,没有--的话就成了切换分支了

$ cat write.txt
one line
two line

这种情况使用我还没有添加到暂存区,如果你已经添加到暂存区了,那你就可以选择通过回退来进行,无论你是删除了文件还是增加了文件,只要你还么有添加到暂存区,都可以使用这种方法

创建与合并分支

上面我们都是在master的分支上进行操作的,但是实际的生产中,我们并不允许直接在master上做代码的修改,那么我们该怎么办?

$ git branch 分支名
这里需要注意,注意你当前的分支,你在哪个分支下,你就会创建一份和当前分支一模一样的代码的另一个分支
所以一般我们创建分支的时候需要先切换分支到master上(特殊情况除外)

$ git checkout master
$ git branch aaaa
这样aaaa分支上的代码和master上的代码是完全一致的

在这里插入图片描述

删除分支:
一个项目结束之后,我们通常会选择释放分支,即删除分支,这个也不是必须的,只不过当你在本地仓库和远程仓库看到n年之前的分支还在那里,不显得很累赘吗?

删除分支,不能再要删除分支下操作

$ git branch -d aaaa
删除本地分支
$ git push origin :aaaa
:为必须要素,删除远程分支

当我们在我们自己的分支上做完功能之后,需要上线,这时候代码需要合并到master分支上

$ git checkout master
$ git merge --no-ff aaaa

同样的,如果我们需要同步master 的代码到我们自己的分支上

$ git checkout aaaa
$ git merge --no-ff master
  • 查看分支:git branch

  • 创建分支:git branch 分支号

  • 切换分支:git checkout 分支号

  • 创建+切换分支:git checkout –b 分支号

  • 合并某分支到当前分支:git merge 分支号

  • 删除分支:git branch –d 分支号

附一份我工作中常用到的git命令

生成密钥:

$ ssh-keygen -t rsa
或者
$ ssh-keygen -t rsa -C "your_email@youremail.com"

查看当前git的用户民和邮箱:

$ git config user.name
huchenfei
$ git config user.email
***********

修改当前git的用户名和邮箱:

$ git config --global user.name "your name"
$ git config --global user.email "your email"

git pull/push不需要输入密码

如果是https的连接需要下面的操作
$ git config --global credential.helper store
$ git pull
输入账号密码
$ git pull 这是就不需要了

如果是ssh的连接
需要把ssh key放到git上

Git查看配置:

$ git config --list
$ git config --global push.default simple
$ git config --global merge.ff false

基于某分支创建新分支:

$ git branch xxxx
$ git checkout xxxx
$ git push origin xxxx

检出分支:

$ git fetch
$ git checkout xxxx

提交代码:

$ git checkout xxxx
$ git add -A    或者    git add .   或者    git add 具体的修改文件
$ git commit -m "abcdefg"
$ git push origin xxxx

结束分支(把代码合并到master分支):

$ git checkout xxxx
$ git pull origin xxxx
$ git checkout master
$ git pull origin master
$ git merge --no-ff xxxx
$ git push origin master

删除本地分支:

$ git branch -d xxxx

删除远程分支:

$ git push origin  :xxxx

合并(把源分支的代码合并到目标分支):

$ git checkout 源分支名
$ git pull origin 源分支名
$ git checkout 目标分支
$ git pull origin 目标分支名
$ git merge --no-ff 源分支名
$ git push origin 目标分支名

恢复以前的代码:

$ git reset --hard HEAD 	代码没有commit之前,恢复到上一次commit的代码。
$ git reset --hard HEAD^ 	还没有push之前,撤销最新的commit,代码恢复到上上一次的commit。
$ git reset --soft HEAD^ 	还没有push之前,撤销最新的commit,代码不变。

posted @ 2019-07-17 11:06  H_CF  阅读(648)  评论(0编辑  收藏  举报