美文网首页
git常用命令

git常用命令

作者: X1_blog | 来源:发表于2020-04-30 15:54 被阅读0次

创建本地分支并拉取远程同名分支?

git clone -b topic https://github.com/llbrh001/gittest.git  // 拉取远程topic分支文件

从缓存区撤销一个文件?

git restore --staged "upload4.txt"

撤销一个缓存区文件 / 清空working tree?

git rm --cached "upload4.txt"           // 撤销文件缓存
git reset                             // 清空缓存区

回滚到指定版本?

A. 本地回滚

# 提交一个文件
git add "upload4.txt"
git commit -m "version 1"
type upload4.txt        # foo
# 修改文件内容并更新文件
git add "upload4.txt"
git commit -m "version 2"
type upload4.txt        # foo smart
# 查看最近3次提交
git log -3

commit ba701550bcd86f37466c4ef8be11e54ceb23c622 (HEAD -> topic)
Author: llbrh001 <435040083@QQ.COM>
Date:   Mon Apr 13 15:45:53 2020 +0800

    version 2

commit 9e6d5e42512325af3c52d78fe0b2d09f5be26323
Author: llbrh001 <435040083@QQ.COM>
Date:   Mon Apr 13 15:45:27 2020 +0800

    version 1

commit 61ca247c38f98f6046165d317fcce20d750504b0
Author: llbrh001 <435040083@QQ.COM>
Date:   Sun Apr 12 16:25:30 2020 +0800

    version 0
# 回退head到version1
git reset --hard 9e6d5e42512325af3c52d78fe0b2d09f5be26323
# git reset --hard HEAD~1  回退1个版本
# HEAD is now at 9e6d5e4 version 1

git log -1
#git log --pretty=oneline

commit 9e6d5e42512325af3c52d78fe0b2d09f5be26323 (HEAD -> topic)
Author: llbrh001 <435040083@QQ.COM>
Date:   Mon Apr 13 15:45:27 2020 +0800

    version 1

type upload4.txt        # foo 

B. 远程回滚


文件对比

git diff [filename可选]

A. 对比本地&本地仓库文件内容修改?

type upload5.txt        # 查看本地文件, 输出 888 999
git add & commit ... 

echo 888 000 > upload5.txt  
type upload5.txt        # 再次查看本地文件, 输出 888 000

git diff upload5.txt    # 输出本地文件和本地仓库的区别

diff --git a/upload5.txt b/upload3.txt
index a46ed29..c349552 100644
--- a/upload5.txt
+++ b/upload5.txt
@@ -1,2 +1,2 @@
 888            # 没有改变的数据
-999            # 删除的数据
+000            # 新增的数据

B. 查看发生更改的本地文件

git status
# 返回当前分支, 
On branch topic
Your branch and 'origin/topic' have diverged,
and have 5 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   upload3.txt
        modified:   upload4.txt

C. 对比本地仓库和远程仓库的区别

git fetch origin master
git log master..origin/master       # 提交差异
commit 1477998cbbf0b7ed5c02a4cd76ce4cc6bf270a86 (origin/master, origin/HEAD)
Author: llbrh001 <435040083@QQ.COM>
Date:   Tue Apr 14 16:57:57 2020 +0800

    Create 1.txt

commit a11d4830de9cc353550ef55a0595dc6fb2752ffa
Author: llbrh001 <435040083@QQ.COM>
Date:   Tue Apr 14 16:57:39 2020 +0800

    Update upload5.txt

git diff --stat master origin/master    # 文件差异
 1/1.txt     | 1 +
 upload2.txt | 3 ++-
 upload3.txt | 1 -
 upload5.txt | 2 ++
 4 files changed, 5 insertions(+), 2 deletions(-)

git reset soft / hard?

git reset( soft ) : 跳转头指针, hard 跳转指针并刷新工作树

A. 返回过去节点

git reset --hard HEAD~1 # 重置头指针到上一个版本, 清空stage, 修改working tree

git reset --soft HEAD~1 # 重置头指针到上一个版本, working tree保持当前状态, 所有影响的文件在stage保存
git checkout "upload4.txt"  # 将stage文件覆盖到working tree

B. 跳转到head之前的节点

适用于曾经回退到head之前接着又要撤销操作的时候

git reflog -2 

9e6d5e4 HEAD@{2}: reset: moving to HEAD~1
20f766a HEAD@{3}: commit: version 2

git reset --hard 20f766a    # 本地文件已经改变

操作前 : 9e6d5e4(head) -> 20f766a
操作后 : 9e6d5e4 -> 20f766a (head)

git stash / git stash pop?

说明: 互为逆运算

  1. 将暂存区的内容存到临时暂存区, 清空暂存区 ;
  2. 恢复暂存区到最后一次存储的状态, 并刷新工作树

目标: 保存当前状态, 获得干净的工作树

使用场景: 当我做了一部分修改到暂存区但是没有完成, 不准备commit 又不想丢弃stage的缓存数据

  1. 当我拉取远程文件但是和当前本地修改有冲突
  2. 当我需要临时切换到其他分支工作
  3. 当我临时需要使用干净的stage
# 测试1
git add file 
git status      
Changes to be committed:
        new file:   upload5.txt
        
git stash       # 暂存区快照
git status 
nothing to commit, working tree clean

git stash pop   # 恢复快照

git status 
new file:   upload5.txt
# 测试2
git checkout upload4.txt        # 当前文件888
edit upload4.txt & git add ...   # 当前文件修改为 888 999
git stash
git status  #   nothing to commit, working tree clean, 当前文件回到888
git stash pop 
git status  #   modified:   upload4.txt, 当前文件回到888 999

git merge使用说明?

将目标分支合并到当前分支, 并在前面新增一个头节点(fast-forward策略), 使用三路合并算法


image.png
git checkout master     # 当前为master
git merge origin/topic  # 将topic分支合并到当前master分支

Updating 71619e9..84d3bad
Fast-forward
 upload2.txt | 2 +-
 upload3.txt | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 upload3.txt

git revert ?

撤销到某次提交并为此创建最新一个节点

git restore --staged filename?

将指定文件从暂存区撤销

git revert?

还原到指定一个提交, 并在最前方创建一个新节点

git log -2
commit fb2861594deca5cf71236c23c1b3ccdaf1bd61a7 (HEAD -> topic)
Author: llbrh001 <435040083@QQ.COM>
Date:   Mon Apr 13 23:06:03 2020 +0800

    revert test

commit 8f226825cb2357116e1ea1eb710cc62322552572
Author: llbrh001 <435040083@QQ.COM>
Date:   Mon Apr 13 22:22:54 2020 +0800

    edit2
git revert HEAD
git log -2

commit 7ea5d42c6fdc308943c117fb92666e51ad3c1799 (HEAD -> topic)
Author: llbrh001 <435040083@QQ.COM>
Date:   Mon Apr 13 23:16:05 2020 +0800

    Revert "revert test"

    This reverts commit fb2861594deca5cf71236c23c1b3ccdaf1bd61a7.

commit fb2861594deca5cf71236c23c1b3ccdaf1bd61a7
Author: llbrh001 <435040083@QQ.COM>
Date:   Mon Apr 13 23:06:03 2020 +0800

    revert test

git checkout 两种用法:

1. git checkout topic       // 切换分支
2. git checkout "upload4.txt"   // 拉取本地库的文件

切换分支并提交文件?

# 假设已经在可提交的环境下
git branch topic        // 创建分支topic
git checkout topic      // 切换到topic分支
git add "upload3.txt"
git commit -m "first commit to topic"
git push origin topic

本地文件夹绑定远程仓库?

  1. 直接clone 远程文件夹
  2. init初始化本地仓库, remote add 关联指定远程仓库, pull 拉取最新文件
# 无本地仓库
git clone https://github.com/llbrh001/gittest.git   // 拉取远程文件

# 有本地仓库
git init
git remote add origin https://github.com/llbrh001/gittest.git       // 关联远程仓库

拉取远程文件 ?

git pull origin master                      # 拉取主分支
git pull origin topic:topic                 # 拉取远程分支到当前分支

提交到远程文件 ?

git push origin master 

如何处理冲突?

获取最新远程文件并不更新本地 --> 对比文件差异 --> 手动合并版本 --> 提交往前推送一个版本 --> 完成

git fetch origin master
git diff --stat master origin/master
# 手动处理冲突
git add & commit & pull

相关文章

网友评论

      本文标题:git常用命令

      本文链接:https://www.haomeiwen.com/subject/hdttghtx.html