git本地仓库和远程仓库关联
- 创建远程仓库
- 初始化本地仓库
git init
git add .
git commit -m "desc"
- 关联远程仓库 git remote add origin gitee.com/username/xx…
- 拉取远程代码 git pull --rebase origin master
- 提交本地代码 git push origin master
git 更新远程分支至本地
$ git remote update origin --prune
git 分支查看、新建、删除,合并
- 查看分支
1. 本地分支
$ git branch
* master
2. 远程分支
$ git branch -a
* master
remotes/origin/master
- 新建分支
1. 新建分支
$ git checkout -b dev
Switched to a new branch 'dev'
2. 切换到新建分支
$ git checkout dev
Already on 'dev'
3. 拉取远程分支到本地,并建立新分支
$ git fetch origin feature:feature
From https://gitee.com/zhongjiao999/git-cli-test
* [new branch] feature -> feature
* [new branch] feature -> origin/feature
$ git checkout feature
Switched to branch 'feature'
- 删除分支
1. 删除本地分支
$ git branch -d delBranch (-D强制删除)
Deleted branch delBranch (was 3a082cc).
2. 删除远程分支
$ git push origin --delete remoteBranch
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/zhongjiao999/git-cli-test.git
- [deleted] remoteBranch
- 分支合并
1. 正常合并
$ git merge feature
Updating 3a082cc..1bedd58
Fast-forward
index.vue | 1 -
1 file changed, 1 deletion(-)
2. 合并产生冲突
$ git merge feature
Auto-merging index.vue
CONFLICT (content): Merge conflict in index.vue
Automatic merge failed; fix conflicts and then commit the result.
$ git status
On branch dev
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.vue
no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -a
[dev 0555bbe] Merge branch 'feature' into dev
git 对比
- 显示出所有有差异的文件的详细差异
$ git diff dev feature
- 显示指定文件的详细差异
$ git diff dev feature -- './index.vue'
diff --git a/index.vue b/index.vue
index f492f9b..a4c5243 100644
--- a/index.vue
+++ b/index.vue
@@ -1,6 +1,7 @@
<template>
<div>
{{ content }}
+ lkjhh
</div>
</template>
<script>
git 回滚
- 撤销工作区改动
1. 所有改动
$ git checkout -- .
2. 指定路径改动
$ git checkout -- ./index.vue
- 撤销暂存区文件改动至工作区
1. 将所有添加至暂存区的文件回退到至工作区
$ git reset HEAD .
Unstaged changes after reset:
M index.vue
2. 指定将添加至暂存区的文件回退到至工作区
$ git reset HEAD ./index.vue
Unstaged changes after reset:
M index.vue
- 撤销 commit 至本地分支改动 (未 push 至远程分支)
// 不保留所有改动
1. 回滚最近 commit 改动,不保留暂存区,工作区改动
$ git reset --hard HEAD^
HEAD is now at 48720fc change modify
或
$ git reset --hard <commit_id>
// 保留所有改动
2. 回滚最近 commit 和暂存区记录,并保留改动至工作区
$ git reset HEAD^
Unstaged changes after reset:
M index.vue
或
$ git reset <commit_id> 只保留最后一次commit 改动
3. 保留之前提交记录,用一次新的commit来回滚之前的commit
$ git revert 7f2626ccf
Auto-merging index.vue
git 转移
只需要部分代码变动(某几个提交),这时可以采用 Cherry pick
- 转移另一个分支上的某个代码变动
$ git cherry-pick 9448db12add3cc7581b18c8628edeb8a56946ff9
Auto-merging index.vue
或者 (分支名:表示转移该分支的最新提交)
$ git cherry-pick feature
- 转移多个提交
1. 转移多个提交
$ git cherry-pick <HashA> <HashB>
2. 转移多个系列提交(不包括 A)
$ git cherry-pick A..B
3. 转移多个系列提交(包括 A)
$ git cherry-pick A^..B
- 配置项
git cherry-pick命令的常用配置项如下。
(1)-e,--edit
打开外部编辑器,编辑提交信息。
(2)-n,--no-commit
只更新工作区和暂存区,不产生新的提交。
(3)-x
在提交信息的末尾追加一行(cherry picked from commit ...),方便以后查到这个提交是如何产生的。
(4)-s,--signoff
在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。
(5)-m parent-number,--mainline parent-number
如果原始提交是一个合并节点,来自于两个分支的合并,那么 Cherry pick 默认将失败,因为它不知道应该采用哪个分支的代码变动。
-m 配置项告诉 Git,应该采用哪个分支的变动。它的参数parent-number是一个从1开始的整数,代表原始提交的父分支编号。
$ git cherry-pick -m 1 <commitHash>
上面命令表示,Cherry pick 采用提交commitHash来自编号1的父分支的变动。
一般来说,1号父分支是接受变动的分支(the branch being merged into),2号父分支是作为变动来源的分支(the branch being merged from)。
- 代码冲突
1. --continue
用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行;
2. --abort
发生代码冲突后,放弃合并,回到操作前的样子。
3. --quit
发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。
摘自:www.cnblogs.com/lp0636/p/10… www.ruanyifeng.com/blog/2020/0…