git 常用命令

2019-05-27  本文已影响0人  醉了俗身醒了初心

git常用命令

克隆仓库代码:

```
git clone 仓库地址 别名 
git clone -b 分支名 仓库地址 别名
//列如:
git clone -b v2.8.1 https://git.oschina.net/oschina/android-app.git
 
```

初始化本地仓库:

```
git init
```

跟踪新文件:

```
git add 文件名(目录或者文件, 会递归添加)
可以理解为: 添加到下一次提交中

```

提交到本地仓库:

```
git commit / git commit -m "description"
```

移除文件:

```
git rm 文件
git rm -rf(递归强制) 文件目录

```

尝试重新提交:

```
git commit --amend 撤销上一次提交, 使用当前提交
```

撤销对文件的修改:

```
git checkout -- 文件名
```

查看远程仓库:

```
git remote -v 简写 / git remote show origin
```

添加远程仓库:

```
git remote add 分支名 url
git remote add dev https://github.com/paulboone/ticgit
```

拉取代码

```
使用dev_osborn 代替url, 拉取某个分支代码, 
你将会拥有那个远程仓库中的所有分支的引用, 不主动合并代码
git fetch dev_osborn  

从远程仓库拉取代码并且合并
git pull dev_osborn 

```

推送到远程仓库

```
git push -u origin master 
```

重命名远程仓库

```
git remote rename dev_osborn(旧名字) test(新名字)
```

查看提交历史

```
git log 
git log -p 显示每次提交的内容差异
git log --stat 每次提交的简略的统计信息
git log --since=2.weeks 列出所有最近两周内的提交

-(n) 仅显示最近的 n 条提交

--since, --after 仅显示指定时间之后的提交。

--until, --before 仅显示指定时间之前的提交。

--author 仅显示指定作者相关的提交。

--committer 仅显示指定提交者相关的提交。

--grep 仅显示含指定关键字的提交

-S 仅显示添加或移除了某个关键字的提交

```

移动文件或者重命名文件

```
git mv file1 file2 重命名
git mv file1 ~/Desktop 移动文件
```

查看文件状态

```
git status 查看文件状态
git status -s 以更紧凑的方式输出
A 添加
M 修改
AM 添加并修改
MM 左右都表示已经修改了, 左边已放到暂存区, 右边未放到暂存区
```

查看忽略文件

```
cat .gitignore
```

查看分支变化

```
git diff 查看未暂存的文件更新了哪些部分
git diff --cached 查看已经暂存的文件的变化
```

查看配置信息

```
git config --global --list 
git config --help 查看帮助命令
```

分支管理

```
git branch testing 创建分支

git checkout master 切换到指定分支

git checkout -b dev 新创建并切换到dev分支

git checkout -b dev origin/dev 拉取远程分支, 并创建本地分支

git branch -d dev 删除dev分支

git branch -D dev 强制删除分支

合并分支 merge
git checkout master
git merge dev 将dev分支合并到master分支

git branch 查看分支列表 

git branch -v 查看各个分支最后一个提交对对象的信息

git branch --merge 查看那个分支是当前分支的直接上游

git branch --no--merge 查看尚未合并的分支

git push origin :dev 删除远程dev分支

衍合分支 rebase
git checkout dev
git rebase master 将dev分支衍合到master分支

衍合分支, 快进合并
假设在接下来的一次软件发布中,我们决定先把客户端的修改并到主线中,
而暂缓并入服务端软件的修改(因为还需要进一步测试)。
这个时候,我们就可以把基于 server 分支而非 master 分支的改变(即 C8 和 C9),
跳过 server 直接放到 master 分支中重演一遍, 
但这需要用 git rebase 的 --onto 选项指定新的基底分支 master:
git rebase --onto master server client
快进合并
git checkout master 
git merge client

现在我们决定把 server 分支的变化也包含进来。我们可以直接把 server 分支
衍合到 master,而不用手工切换到 server 分支后再执行衍合操作 
— git rebase [主分支] [特性分支] 命令会先取出特性分支 server,
然后在主分支 master 上重演:
git rebase master server
git checkout master 
git merge server
```

重置提交

```
git reflog 查看提交历史
git reset --hard HEAD 重置提交到某个节点
```

重置提交信息

```
修改最近一次的提交, 比如git commit -m "test01", 之后, 
发现提交信息有误, 使用下面的命令修改
git commit --amend
如果已经提交到服务端, git pull 拉取代码, 合并提交信息, 再提交.
```

切换至指定节点的代码库

```
git log
git checkout -[3e07fd8]
```

git 子module

```
    
    // 1, 将另一个git项目, 添加到当前git项目中, 作为submodule存在

    git submodule add https://github.com/chaconinc/DbConnector 

    如果这时运行 git status,你会注意到几件事。
    
    // 2, 查看状态

    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    
    Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)

    new file:   .gitmodules
    new file:   DbConnector
    
    // 3, 查看.gitmodules文件, 该配置文件保存了项目URL与已经拉取的本地目录之间的映射

    $ cat .gitmodules
    [submodule "DbConnector"]
    path = DbConnector
    url = https://github.com/chaconinc/DbConnector

    // 4, 在 git status 输出中列出的另一个是项目文件夹记录。 如果你运行 git diff,会看到类似下面的信息:

    $ git diff --cached DbConnector
    diff --git a/DbConnector b/DbConnector
    new file mode 160000
    index 0000000..c3f01dc
    --- /dev/null
    +++ b/DbConnector
    @@ -0,0 +1 @@
    +Subproject commit c3f01dc8862123d317dd46284b05b6892c7b29bc
    
    /* 5, 
    虽然 DbConnector 是工作目录中的一个子目录,但 Git 还是会将它视作一个子模块。当你不在那个目录中时,Git 并不会跟踪它的内容, 而是将它看作该仓库中的一个特殊提交。
    如果你想看到更漂亮的差异输出,可以给 git diff 传递 --submodule 选项。
    */
    
    $ git diff --cached --submodule
    diff --git a/.gitmodules b/.gitmodules
    new file mode 100644
    index 0000000..71fc376
    --- /dev/null
    +++ b/.gitmodules
    @@ -0,0 +1,3 @@
    +[submodule "DbConnector"]
    +       path = DbConnector
    +       url = https://github.com/chaconinc/DbConnector
    Submodule DbConnector 0000000...c3f01dc (new submodule)

    // 6, 当你提交时,会看到类似下面的信息:
    $ git commit -am 'added DbConnector module'
    [master fb9093c] added DbConnector module
     2 files changed, 4 insertions(+)
     create mode 100644 .gitmodules
     create mode 160000 DbConnector

```

克隆含有子模块的项目

```
    //1, 克隆含有submodule 的项目, 子模块默认为空目录, 需要初始化
    git clone https://gitee.com/wqc910605/MyDemos.git
    
    //2, 初始化和更新submodule 
    git submodule init 
    git submodule update
    
    //3, 或者 递归克隆
    git clone --recursive https://gitee.com/wqc910605/MyDemos.git
```

在包含子模块的项目上工作

```
//1, 如果想要在子模块中查看新工作,可以进入到目录中运行 git fetch 与 git merge,合并上游分支来更新本地代码。

git fetch
From https://github.com/chaconinc/DbConnector
   c3f01dc..d0354fc  master     -> origin/master
$ git merge origin/master
Updating c3f01dc..d0354fc
Fast-forward
 scripts/connect.sh | 1 +
 src/db.c           | 1 +
 2 files changed, 2 insertions(+)

//2, 如果你现在返回到主项目并运行 git diff --submodule,就会看到子模块被更新的同时获得了一个包含新添加提交的列表。 如果你不想每次运行 git diff 时都输入 --submodle,那么可以将 diff.submodule 设置为 “log” 来将其作为默认行为。

git config --global diff.submodule log
$ git diff
Submodule DbConnector c3f01dc..d0354fc:
> more efficient db routine
> better connection routine

//3, 如果你不想在子目录中手动抓取与合并,那么还有种更容易的方式。 运行 git submodule update --remote,Git 将会进入子模块然后抓取并更新。

$ git submodule update --remote DbConnector
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2)
Unpacking objects: 100% (4/4), done.
From https://github.com/chaconinc/DbConnector
   3f19983..d0354fc  master     -> origin/master
Submodule path 'DbConnector': checked out 'd0354fc054692d3906c85c3af05ddce39a1c0644'

//4, 此命令默认会假定你想要更新并检出子模块仓库的 master 分支。 不过你也可以设置为想要的其他分支。 例如,你想要 DbConnector 子模块跟踪仓库的 “stable” 分支,那么既可以在 .gitmodules 文件中设置(这样其他人也可以跟踪它),也可以只在本地的 .git/config 文件中设置。 让我们在 .gitmodules 文件中设置它:

$ git config -f .gitmodules submodule.DbConnector.branch stable

$ git submodule update --remote
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2)
Unpacking objects: 100% (4/4), done.
From https://github.com/chaconinc/DbConnector
   27cf5d3..c87d55d  stable -> origin/stable
Submodule path 'DbConnector': checked out 'c87d55d4c6d4b05ee34fbc8cb6f7bf4585ae6687'

```

git清除用户名密码

git config --system --unset credential.helper
  1. git 第一次关联远程仓库时, 提交冲突
git init   // 初始化版本库

git add .   // 添加文件到版本库(只是添加到缓存区),.代表添加文件夹下所有文件 
 
git commit -m "first commit" // 把添加的文件提交到版本库,并填写提交备注
 
git remote add origin 你的远程库地址  // 把本地库与远程库关联
 
因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在git pull,
这句代码是在git 2.9.2版本发生的,最新的版本需要添加--allow-unrelated-histories

git pull origin master --allow-unrelated-histories
 
git push -u origin master    // 第一次推送时
 
git push origin master  // 第一次推送后,直接使用该命令即可推送修改

git---如何解决The authenticity of host 'gitee.com (120.55.226.24)' can't be established

Are you sure you want to continue connecting (yes/no)? yes

在新生成密钥之后,在.ssh文件夹(之前的文章有提到过)中少了一个known_hosts文件,本来密钥文件应该是三个,现在是两个,便报了这样的错误,此时选择yes回车之后,便可,同时生成了缺少了的known_hosts文件:

git配置ssh

git config --global --list 查看git用户信息
git config --global user.name '用户名'
git config --global user.email '邮箱名'
ssh-keygen -t rsa -C 'user.email' 一路回车下去 
生成目录windows 和ios 都在~/.ssh目录下
上一篇下一篇

猜你喜欢

热点阅读