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
- 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目录下