Git常用操作总结

基础操作

创建别名

git中可以给一些常用命令设置别名,这样就不用每次都输入长长的单词了,常用的别名设置为:

git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.st status

然后就可以愉快的敲 git st 来查看当前状态了。

分支操作

查看当前分支

git br
* master

其中,master为当前分支名称。

创建本地分支

git co -b branch-name

执行该指令后,会在本地创建一个新分支,该分支是从当前分支上检出的,所以所有文件内容都和当前分支一模一样,这是正常的。创建成功后,将自动切换至新分支上。

比如,我要创建dev分支,则运行以下代码:

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

$ git br
* dev
  master

可以看到当前存在两个分支,且已经切换到了dev分支。

推送本地分支到远程仓库

$ git push origin dev:dev
Total 0 (delta 0), reused 0 (delta 0)
remote:
...
remote:
To github.com:DivineH/test.git
 * [new branch]      dev -> dev

我们通过 git push 命令将本地分支push到远程分支,其中,origin表示远程主机名称,查看github上的分支列表,可以看到如下分支:
在这里插入图片描述
可以看到,我们已经将本地dev分支上传到了远程服务器上。

删除分支

我们可以使用 git br -d 或者 -D参数来删除本地分支,其中 -D 为强制删除:

$ git br -D dev
Deleted branch dev (was be8a89f).

$ git br
* master

那如何删除远程分支呢?我前面介绍了如何将本地分支同步到远程服务器的方法,我们同样可以借助 git push 来删除远程分支:

$ git br
* dev
  master

$ git push origin :dev
 - [deleted]         dev

此时,我们已经删除了远程服务器上的dev分支,如下所示:
在这里插入图片描述

拉取远程分支到本地

假如远程服务器存在了一个名为dev的分支,但是本地不存在此分支,那如何将该分支拉取到本地呢?

git checkout -b 本地分支名 origin/远程分支名

我们先删除本地的dev分支,然后再去远程服务器拉取分支:

$ git br -D dev
Deleted branch dev (was be8a89f).

$ git br
* master

$ git co -b dev origin/dev
Switched to a new branch 'dev'
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

$ git br
* dev
  master

提交代码

$ git st
On branch dev
Your branch is up to date with 'origin/dev'.

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

        main.cpp

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


$ git add main.cpp

$ git st
On branch dev
Your branch is up to date with 'origin/dev'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   main.cpp

$ git ci -m 'add main.cpp'
[dev cd83d8f] add main.cpp
 1 file changed, 9 insertions(+)
 create mode 100644 main.cpp

$ git push
...
To github.com:DivineH/test.git
   be8a89f..cd83d8f  dev -> dev

其中 git st 可以查看当前仓库的状态,使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。此时,我们可以使用 git add 来将那些untracked的文件track起来,之后,我们需要使用 git ci 命令将新增的文件提交到本地仓库中,最后,我们需要通过 git push 命令将本地修改同步到远程服务器上。

合并分支

我们前面都是在dev分支上进行了修改,那如何将 dev 分支的修改同步到 master 分支上呢?

$ git co master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

$ ll
total 1
-rw-r--r-- 1 HC 197121 7 9月  22 18:04 README

我们首先切回到 master 分支,可以看到 master 分支是没有新增文件的,为了将 dev 分支的修改合并到 master 分支上,我们需要运行以下命令:

$ git merge dev
Updating be8a89f..cd83d8f
Fast-forward
 main.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)
 create mode 100644 main.cpp

$ ll
total 2
-rw-r--r-- 1 HC 197121 102 9月  22 18:49 main.cpp
-rw-r--r-- 1 HC 197121   7 9月  22 18:04 README

$ git push
Total 0 (delta 0), reused 0 (delta 0)
To github.com:DivineH/test.git
   be8a89f..cd83d8f  master -> master

通过 git merge 操作可以将其他分支合并到当前分支,然后通过 git push 将本地修改同步到远程服务器上,此时,如果 dev 分支已经不需要了,就可以将 dev 分支删除掉了。

回滚分支

回滚分支主要分为以下3种情况:

未进行 add 操作

$ git st
On branch master
Your branch is up to date with 'origin/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:   main.cpp

比如,我们修改了 main.cpp 的代码,但是还没有执行 add 操作,此时,只需要进行简单的 git co – . 全部或者 git co – 来恢复具体的文件。

$ git co -- main.cpp

$ git st
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean

未进行 commit 操作

$ git st
On branch master
Your branch is up to date with 'origin/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:   main.cpp

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

$ git add main.cpp

$ git st
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   main.cpp

此时,我们已经 add 了文件,但是还没有 commit ,此时,再通过 git co – 来恢复文件的结果如下所示:

$ git co -- main.cpp

$ git st
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   main.cpp

可以看到,文件并没有恢复,因为这些修改已经被放入缓存区了,这个时候,可以使用 git reset HEAD 命令来放弃指定的文件的缓存,如果要放弃所有修改的缓存,可以使用 git reset HEAD . ,如下所示:

$ git reset HEAD main.cpp
Unstaged changes after reset:
M       main.cpp

$ git st
On branch master
Your branch is up to date with 'origin/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:   main.cpp

可以看到,执行 git reset 之后,当前状态已经恢复成 add 之前的状态,此时,可以通过 git co – 来放弃对文件的修改。

已经执行 commit 操作

比如,我们已经将修改的文件执行了 commit 操作,此时,仓库的状态如下:

$ git st
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

该状态表示,本地分支领先于远程分支1个 commit 操作。
为了回滚分支,我们同样使用 git reset 来进行回滚,可以使用 git reset --hard HEAD^ 来回退到上一次 commit 的状态。

$ git reset --hard HEAD^
HEAD is now at cd83d8f add main.cpp

$ git st
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

$ git log
commit cd83d8f5b64a092a6f82afeec053289615a0bc23 (HEAD -> master, origin/master, origin/dev, dev)
Author: DivineH <2414767656@qq.com>
Date:   Sun Sep 22 18:44:52 2019 +0800

    add main.cpp

commit be8a89f2a21a11a0c3d2303489fdf09f24191e63
Author: DivineH <2414767656@qq.com>
Date:   Sun Sep 22 18:04:21 2019 +0800

    update README

commit c1842acbf281c5f9eeebc5ba5c44a1bf368d1761
Author: DivineH <2414767656@qq.com>
Date:   Sun Sep 22 18:02:44 2019 +0800

    add README

其中,HEAD^ 表示上一个版本,另外,使用此命令可以回退到任意版本:git reset --hard commitid
这里的 commitId 就是使用 git log 显示的提交历史中的 SHA 码,只需要前面几位即可。

$ git log
commit cd83d8f5b64a092a6f82afeec053289615a0bc23 (HEAD -> master, origin/master, origin/dev, dev)
Author: DivineH <2414767656@qq.com>
Date:   Sun Sep 22 18:44:52 2019 +0800

    add main.cpp

commit be8a89f2a21a11a0c3d2303489fdf09f24191e63
Author: DivineH <2414767656@qq.com>
Date:   Sun Sep 22 18:04:21 2019 +0800

    update README

commit c1842acbf281c5f9eeebc5ba5c44a1bf368d1761
Author: DivineH <2414767656@qq.com>
Date:   Sun Sep 22 18:02:44 2019 +0800

    add README

$ git reset --hard be8a89
HEAD is now at be8a89f update README

$ git log
commit be8a89f2a21a11a0c3d2303489fdf09f24191e63 (HEAD -> master)
Author: DivineH <2414767656@qq.com>
Date:   Sun Sep 22 18:04:21 2019 +0800

    update README

commit c1842acbf281c5f9eeebc5ba5c44a1bf368d1761
Author: DivineH <2414767656@qq.com>
Date:   Sun Sep 22 18:02:44 2019 +0800

    add README

可以看到,此时,仓库已经回退到了 be8a89f2a21a11a0c3d2303489fdf09f24191e63 这个版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值