git 基本操作命令

261 阅读2分钟

git本地仓库和远程仓库关联

  1. 创建远程仓库
  2. 初始化本地仓库
   git init     
   git add .     
   git commit  -m "desc"
  1. 关联远程仓库 git remote add origin gitee.com/username/xx…
  2. 拉取远程代码 git pull --rebase origin master
  3. 提交本地代码 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…