git命令实操~~~

基本操作

目录

基本操作

分支的操作


  • 创建一个版本库或者目录命令
$ mkdir git-tutorial
$ ca git-tutorial
$ pwd

'pwd'命令--显示当前目录。

  • git init   初始化仓库,把目录变成 git 可以管理的仓库:

要使用Git进行版本管理,必须先初始化仓库,实际建立一个目录并初始化仓库

mkdir git-tutorial
ca git-tutorial
git init

若初始化成功,目录下会生成.git目录。这个.git目录里存储着管理当前目录内容所需的仓库数据。

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

  • ls -ah命令 --用于显示当前目录下的所有文件或文件夹。

在 Git 中,我们将这个目录的内容称为“附属于该仓库的工作树”。文件的编辑等操作在工作树中进行,然后记录到仓库中,以此管理文件的历史快照。如果想将文件恢复到原先的状态,可以从仓库中调取之前的快照,在工作树中打开。开发者可以通过这种方式获取以往的文件。

  • git remote add  origin git*******.git  建立远程连接

eg:git remote add  origin https://github.com/alibaba/transmittable-thread-local.git

eg:git remote add  origin https://github.com:alibaba/transmittable-thread-local.git

  • git  pull 下载代码

 

  • git status 查看工作区的状态

工作树和仓库在被操作的过程中,状态会不断发生变化。在 Git 操作过程中时常用 git status命令查看当前状态。

$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

结果显示了我们当前正处于 master 分支下。关于分支我们会在不久后讲到,现在不必深究。

接着还显示了没有可提交的内容。所谓提交(Commit),是指“记录工作树中所有文件的当前状态”。

尚没有可提交的内容,就是说当前我们建立的这个仓库中还没有记录任何文件的任何状态。

  • git add命令--把文件添加到仓库/向暂存区添加文件

建立文件作为管理对象,为第一次提交做前期准备

$ touch README.md
$ git status
On branch master

No commits yet

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

        README.md

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

可以看到在 Untracked files 中显示了 README.md 文件。类似地,只要对 Git 的工作树或仓库进行操作, git status命令的显示结果就会发生变化。

如果只是用 Git 仓库的工作树创建了文件,那么该文件并不会被记入 Git 仓库的版本管理对象当中。因此我们用 git status命令查看README.md 文件时,它会显示在 Untracked files 里。

要想让文件成为 Git 仓库的管理对象,就需要用 git add命令将其加入暂存区(Stage 或者 Index)中。暂存区是提交之前的一个临时区域。

$ git add README.md
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached ..." to unstage)

        new file:   README.md

  • git deff readme.txt 查看修改的具体内容
  • git commit -m "add distributed" 提交修改信息并添加备注

git commit命令可以将当前暂存区中的文件实际保存到仓库的历史记录中。通过这些记录,我们就可以在工作树中复原文件。

$ git commit -m "First commit"
[master (root-commit) 4680492] First commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

-m参数后的“First commit”称作提交信息,记述一行提交信息。

若要详细记录提交信息,不加-m,直接执行git commot

执行完git commit命令后再来查看当前状态 git status

$ git status
On branch master
nothing to commit, working tree clean
  • git commit --amend 修改最近一次提交的commit注释
  • git log 查看提交历史(git log --pretty=oneline)
$ git log
commit 32dfacee55bfc52f74cc107bb2b8ce025541b8b7 (HEAD -> master)
Author: ......
Date:   Mon Apr 1 18:00:02 2019 +0800

    First test commit

commit 46804924b60c2dfbf5f708db932a452bf32e9260
Author: ........
Date:   Mon Apr 1 17:52:37 2019 +0800

    First commit

commit 栏旁边显示的“9f129b……”是指向这个提交的哈希值。

如果只想让程序显示第一行简述信息,可以在 git log命令后加上 --pretty=short

git log --pretty=short

只要在 git log命令后加上目录名,便会只显示该目录下的日志。如果加的是文件名,就会只显示与该文件相关的日志。

$ git log README.md

如果想查看提交所带来的改动,可以加上 -p参数,文件的前后差别就会显示在提交信息之后。

$ git log -p

比如,执行下面的命令,就可以只查看 README.md 文件的提交志以及提交前后的差别。

$ git log -p README.md
  • git diff 版本号码1 版本号码2 src : 比较两个版本号码的src 文件夹的差异

git diff命令可以查看工作树、暂存区、最新提交之间的差别。

我们在刚刚提交的 README.md 中写点东西。

# Git教程

这里用 Markdown 语法写下了一行题目。

查看工作树和暂存区的差别。执行 git diff命令,查看当前工作树与暂存区的差别。

$ git diff
diff --git a/README.md b/README.md
index e69de29..b01d90b 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+#Git教程

由于我们尚未用 git add命令向暂存区添加任何东西,所以程序只会显示工作树与最新提交状态之间的差别。

这里解释一下显示的内容。“+”号标出的是新添加的行,被删除的行则用“-”号标出。我们可以看到,这次只添加了一行。

用 git add命令将 README.md 文件加入暂存区。

$git add README.md

如果现在执行 git diff命令,由于工作树和暂存区的状态并无差别,结果什么都不会显示。要查看与最新提交的差别,请执行以下命令。
 

$ git diff HEAD
diff --git a/README.md b/README.md
index e69de29..b01d90b 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+#Git教程

好习惯:在执行 git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交。这里的 HEAD 是指向当前分支中最新一次提交的指针


分支的操作

在进行多个并行作业时,我们会用到分支。在这类并行开发的过程中,往往同时存在多个最新代码状态。如图1所示,从 master 分支创建 feature-A 分支和 fix-B 分支后,每个分支中都拥有自己的最新代码。master 分支是 Git 默认创建的分支,因此基本上所有开发都是以这个分支为中心进行的。
git命令实操~~~_第1张图片

 不同分支中,可以同时进行完全不同的作业。等该分支的作业完成之后再与 master 分支合并。比如 feature-A 分支的作业结束后与 master合并,如图 2 所示。通过灵活运用分支,可以让多人同时高效地进行并行开发。

git命令实操~~~_第2张图片

  • git branch——显示分支一览表、查看当前分支
$ git branch
* master

可以看到 master 分支左侧标有“*”(星号),表示这是我们当前所在的分支。也就是说,我们正在 master 分支下进行开发。结果中没有显示其他分支名,表示本地仓库中只存在 master 一个分支。

  •  git checkout -b——创建、切换分支

如果想以当前的 master 分支为基础创建新的分支,我们需要用到git checkout -b命令

切换到 feature-A 分支并进行提交,执行下面的命令,创建名为 feature-A 的分支。

$ git checkout -b feature-A
Switched to a new branch 'feature-A'

实际上,连续执行下面两条命令也能收到同样效果。

$ git branch feature-A
$ git checkout feature-A

创建 feature-A 分支,并将当前分支切换为 feature-A 分支。这时再来查看分支列表,会显示我们处于 feature-A 分支下。

$ git branch
* feature-A
master

feature-A 分支左侧标有“*”,表示当前分支为 feature-A。在这个状态下像正常开发那样修改代码、执行 git add命令并进行提交的话,代 码 就 会 提 交 至 feature-A 分 支。 像 这 样 不 断 对 一 个 分 支(例 如feature-A)进行提交的操作,我们称为“培育分支”

  • git branch dev 创建dev分支
  • git checkout dev 切换为dev分支
  • git checkout -b dev 创建并切换dev分支

在 README.md 文件中添加一行。

# Git教程
- feature-A

这里我们添加了 feature-A 这样一行字母,然后进行提交。

$ git commit -m "Add feature-A"
[feature-A dacb5c8] Add feature-A
 1 file changed, 1 insertion(+)

于是,这一行就添加到 feature-A 分支中了。

现在我们再来看一看 master 分支有没有受到影响。首先切换至master 分支。

$ git checkout master
Switched to branch 'master'

然后查看 README.md 文件,会发现 README.md 文件仍然保持原先的状态,并没有被添加文字。 feature-A 分支的更改不会影响到master 分支,这正是在开发中创建分支的优点。只要创建多个分支,就可以在不互相影响的情况下同时进行多个功能的开发

切换回上一个分支。现在,我们再切换回 feature-A 分支。

$ git checkout -
Switched to branch 'feature-A'
  • git merge dev 合并指定分支到当前分支

  • git branch -d dev 删除指定分支

  • git log --graph
  • git log --pretty=oneline
  • git log --abbrev-commit 查看分支的合并情况

更改提交的操作

回溯历史版本

  • git reset --hard HEAD^ 退回到上一个版本(^表示上一个)
  • git reset --hard 3628164 退回到某个版本(3628164版本号)

推进历史

  • git reflog 查看执行命令历史

git log命令只能查看以当前状态为终点的历史日志。所以这里要使用 git reflog命令,查看当前仓库的操作日志。在日志中找出回溯历史之前的哈希值,通过 git reset --hard命令恢复到回溯历史前的状态。
 

  • git config --global core.quotepath false 解决出现数字乱码问题
  • git reset HEAD xxx.java 撤销已经add的文件
  • git checkout -- readme.txt 撤销修改(回到最近一次commit或add时的状态)
  • git reset HEAD readme.txt 把暂存区的修改撤销掉(unstage),重新放回工作区

s

  •   git rebase -i——压缩历史

在合并特性分支之前,如果发现已提交的内容中有些许拼写错误等,不妨提交一个修改,然后将这个修改包含到前一个提交之中,压缩成一个历史记录。

  • rm test.txt 在文件管理器中把没用的文件删了,或者用rm命令删了
  • git rm test.txt
  • git commit -m "remove test.txt" 从版本库中删除该文件
  • git checkout -- test.txt 把误删的文件恢复到最新版本
  • git remote add origin git@server-name:path/repo-name.git 关联远程仓库
  • git push -u origin master 第一次推送master分支的所有内容
  • git pull 更新内容到本地
  • git push origin v1.0 推送最新修改
  • git push -f origin v1.0 强制提交(慎用)
  •  
  • git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
  • git stash list 查看当前分支的stash列表
  • git stash pop stash@{0}  恢复的同时把stash@{0}内容也删了
  • git stash apply 恢复后,stash内容并不删除
  • git stash drop 删除stash的内容

 

  • git clean -f 删除未选中文件
$ cat ~/.ssh/id_rsa.pub 查看公开密钥id_rsa.pub的内容

$ ssh -T [email protected]  利用秘钥和GitHub进行认证和通信了
Enter passphrase for key '/c/Users/hxxx6/.ssh/id_rsa':
Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.

$ git clone [email protected]:xxxx/Hello-World.git
Cloning into 'Hello-World'...
Enter passphrase for key '/c/Users/xxxxxxxx6/.ssh/id_rsa':
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 3 (de

编辑php或者其他文件

$ git status
On branch master

No commits yet

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

        "GitHub\345\205\245\351\227\250\344\270\216\345\256\236\350\267\[email protected]"
        Hello-World/
        hello_world.php


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

untracked表示未添加至Git仓库

$ git add hello_world.php

$ git commit -m "Add Hello World Script by php"
[master (root-commit) e28603b] Add Hello World Script by php
 1 file changed, 3 insertions(+)
 create mode 100644 hello_world.php

$ git log 查看提交日志

 

执行git命令的时候,发现下面错误
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
解决方法:
$ git fsck 【查询原因】
$ git gc --prune=now 【解决办法】

你可能感兴趣的:(GitHUb)