东行天下

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

一、仓库初始化

git init # 当前路径也是工作区

git -bare init

二、跟踪和提交操作

git add               # 将文件跟踪起来,加入到暂存区中
git commit            # 将暂存区提交本地版本库
git commit -a         # 将本地工作区中的被修改文件(已跟踪状态的)都提交到本地版本库中(当然是先添加到暂存区,后提交本地版本库中)

三、分支操作

1.增删查

git branch                      # 查看本地分支
git branch new_branch           # 新建本地分支
git checkout dev                # 切换分支到dev
git checkout -b mywork master # 基于master分支,新建分支并切换到分支mywork git branch -d dev # 删除那些被当前分支合并的分支 git branch -D dev # 强制删除分支

2.改(分支合并)

git merge dev                  # 合并dev分支到当前所在分支 
git commit -a                  # 解决冲突后,提交

四、查看历史操作

git log 文件名                # 查看commit的历史记录
git log --pretty=oneline # 只显示版本号和提交信息
# git log 无法查看被回退的commit信息
git reflog  # 查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
git show <commit-hash-id> # 查看某次commit的修改内容

五、比较操作

复制代码
git diff            # 比较文件在暂存区和工作区的差异
git diff --cached   # 比较文件在暂存区和本地仓库的差异
git diff HEAD       # 比较文件在工作区和本地仓库的差异
git diff branch1 branch2 文件名 # 比较任意两个分支的某个文件的差异 ,通过git branch -a 查询所有分支名

$ git diff
diff --git a/test.txt b/test.txt
index 753ad01..d9eff2d 100644
--- a/test.txt
+++ b/test.txt
@@ -1,3 +1,4 @@
123123
isdfsd
sdfds
+sdfds

第一行:diff --git a/test.txt b/test.txt ,git diff实质上用的是diff的文本比较工具,其中a/test.txt代表源文件,也就是修改前的文件, b/test.txt代表比目标文件,也就是修改后的文件;
第二行:index 753ad01..d9eff2d 100644 , index后面两个字符串表示两个文件的hash值,最后的数字是文件的权限和属性(?);
第三四行:---代表源文件,+++代表目标文件;
第五行:差异小结,@@ -1,3 +1,4 @@ ,分为两个部分,第一个是-1,3,-表示源文件,1,3表示从第一行开始的三行,后面的+1,4,则表示目标文件的第一行开始的四行内容。差异小结可能会有多个。

剩下的行都是具体的差异信息,其中以空格开头的行代表源文件与目标文件没有差异,以-开头 的行代表在源文件的基础上删除,以+开头代表在源文件基础上添加;

复制代码

六、版本回退

1.总命令

git reset [--soft | --mixed | --hard] [HEAD]
--mixed  为默认,可以不用带该参数。用于重置暂存区,和上一次的提交保持一致。

2.暂存区回退

git reset                  # 默认回退暂存区
git reset HEAD^            # 回退所有内容到上一个版本
git reset HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本 
git reset 052e             # 回退到指定版本

3.本地仓库一次回退(回退commit操作,将本地仓库的内容回退到暂存区,并且已经add的状态)

git reset --soft           # 用于回退到某个版本
git reset --soft HEAD~3    # 回退上上上一个版本

4.硬回退(回退文件到指定版本,回退本地仓库、暂存区、工作区的文件到指定提交,之间的代码会丢失)

git reset --hard           # 将暂存区与工作区都回到上一次版本,并删除之前的所有信息
git reset --hard HEAD      # 重置工作区和暂存区到 本地版本库的当前版本

      5. 回退当前工作区内容

git status            # 查看本地修改
git checkout -- 文件名 # 取消具体文件修改到最近一次提交(提交到暂存区之前的修改)
git checkout .        # 取消所有文件修改到最近一次提交(提交到暂存区之前的修改)
git stash             # 撤销修改
git stash apply       # 将修改应用到工作区中

     6. 本地仓库两次回退(保留代码到工作区,回退add和commit操作)

git reset --mixed commitid

 

七、远程仓库相关操作

复制代码
git remote -v                                              # 查看远程仓库信息
git remote add origin 远程仓库链接.git(注意后面要+.git)    # 连接远程仓库
git push -u origin master                                  # 推送本地仓库到远程仓库,首次提交需要使用完整命令

git pull -u origin master                         # 拉取远程仓库到本地仓库
                                                  # 包含了两个操作
git fetch -u origin master   分解命令1             # 第一个操作是拉取origin上的master分支到本地分支上
git merge origin/master      分解命令2             # 第二个操作是合并origin的master分支到本地分支上,如有冲突得手工解决

 

复制代码

八、文件状态查看

复制代码
git status -s      # 简易查看文件状态信息
            # 输出标记会有两列,第一列是对staging区域而言,第二列是对working目录而言。都是以本地版本库为参考

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: test.txt
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: test.txt
#
$ git status -s
AM test.txt

复制代码

九、查看GIT配置参数

git config -l

 十、clone操作

git clone 只能clone远程库的master分支,无法clone所有分支,解决办法如下:
git clone http://github.xxx.com/project/.git  #克隆远程master分支到本地
git branch -a                                 # 查看远程分支名称
git checkout -b dev origin/dev                # 检出远程分支origin/dev到本地,并命名为dev分支
git checkout dev # 切换到dev分支

 十一、refs引用(参考文献之意)

复制代码
引用(Refs)是一种间接引用commit的方式。它是一种对用户来说更亲和的commit哈希的别名。使Git表示分支与标签的内部机制。
除了commit,其余都是引用
.git/refs/
        heads/ (本地分支)
             master    (master分支的最新commitid)
             some-feature
        remotes/
             origin/
                   master
        tags/
            v0.9
复制代码
git show refs/heads/some-feature  同 git show some-feature ,不过前者更完整。为了区分是heads还是tag
git rev-prase master 可解析出最新的master的commitid

 

十二、refspecs(本地仓库到远程仓库的映射)

refspecs被表示为[+]<src>:<dst>。<src>参数表示本地仓库的分支,<dst>参数表示远程仓库的目标分支,可选参数+表示是否让远程仓库执行non-fast-forward更新
Refspec可与git push命令联合使用来为远程分支添加不同的名字
git push origin master:refs/heads/qa-master    推送本地分支master到 远端 并命名为 qa-master
git push origin :some-feature                  删除远程分支some-feature
复制代码
通过添加几行代码到Git配置文件中,你可以使用refspec来改变git fetch命令的行为:
[remote "origin"]
    url = https://git@github.com:mary/example-repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*
修改为:
[remote "origin"]
    url = https://git@github.com:mary/example-repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master
复制代码

 

十三、相对引用

复制代码
~ 追踪 原生父亲 引用
^ 追踪 再生父亲 引用, HEAD^1表示原生父亲,HEAD^2表示再生父亲,HEAD^N,N表示几级父亲。
git show HEAD^1    -- 原生父亲,第一级父亲,等同于git show HEAD~1
git show HEAD^2    -- 再生父亲,第二级父亲
git show HEAD^2^1  -- 再生父亲的父亲。原head的祖父级
 
复制代码

 

十四、特殊引用

复制代码
存在于.git目录下的顶部

HEAD – 当前检出的 commit/branch. --当前head指向 FETCH_HEAD – 最新从远程仓库获取的分支。 --所有远端分支的最新commitid记录 ORIG_HEAD – 作为备份指向危险操作前的HEAD。 MERGE_HEAD – 使用git merge命令合并进当前分支的提交。 CHERRY_PICK_HEAD – 使用git cherry-pick命令的提交。
复制代码

十五、恢复本地操作

复制代码
reflog是Git的安全网,其中记录了基本上所有的本地仓库中的改变,不论你是否提交了快照。
git reflog
400e4b7 HEAD@{0}: checkout: moving from master to HEAD~2
0e25143 HEAD@{1}: commit (amend): Integrate some awesome feature into `master`
00f5425 HEAD@{2}: commit (merge): Merge branch ';feature';
ad8621a HEAD@{3}: commit: Finish the feature

  通过HEAD{<n>}语法你可以引用存在reflog中的提交。这与之前章节的HEAD~<n>有着相似的用法,但<n>引用reflog中的记录而不是commit历史中的记录

你可以使用此方法回滚在别的记录中丢失的状态。例如,刚用git reset删除一个特性后,你的reflog会像下面这样:

git reset HEAD~3  -- 从当前分支上移除最近三次提交
git reflog
ad8621a HEAD@{0}: reset: moving to HEAD~3
298eb9f HEAD@{1}: commit: Some other commit message
bbe9012 HEAD@{2}: commit: Continue the feature
9cb79fa HEAD@{3}: commit: Start a new feature

 回退上面的操作   git checkout HEAD@{1}

复制代码

 十六、关联本地仓库与远端仓库

1 解析是否存在.git目录 git rev-parse --resolve-git-dir .git   
2 if [[ $? -ne 0 ]] ;then git init;fi
3 配置远端git url :  git config remote.origin.url git@仓库
4 git fetch --process --tags git@仓库 +refs/heads/*:refs/remote/origin/*
5 获取commitID git rev-parse refs/remotes/origin/分支名^{commit}
6 检出远端分支 git checkout -f origin/分支名
7 单层检出  git fetch --tags --force --progress --depth=1 -- git@仓库 +refs/heads/*:refs/remote/origin/*
8 合并操作 git merget --no-ff 原分支commitID -m "11111" 

 十七、创建空白分支

1
2
3
4
git checkout --orphan 新分支名   # 新建一个没有提交历史的新分支,但包含父分支的所有文件
git rm -rf .                               # 删除当前分支的所有文件
接着可以新建文件,然后提交本地仓库
git push origin 新分支名             #  提交新分支到远程仓库

十八、操作特定文件

git 操作 -- 文件名
如: git log -- 1.txt 查看1.txt文件的历史提交
git checkout -- 1.txt 拉取到最新的提交

 

 提交及回退操作如上图所示

posted on   东行天下  阅读(647)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
 
点击右上角即可分享
微信分享提示