当前位置:   article > 正文

Git学习笔记_现在为推送当前(分离头指针)的历史,使用

现在为推送当前(分离头指针)的历史,使用
配置user信息
  1. 配置user.name

    • git config --global user.name 'your_name'
  2. 配置user.email

    • git config --global user.email 'your_email'
  3. 查看所有配置信息,缺省等同于local

    • git config --local -l 只对某个仓库有效
    • git config --global -l 对当前用户所有仓库有效
    • git config --system -l对系统所有登录的用户有效
    • git config 属性名 查看某一项配置 如:git config user.name
创建Git仓库
  1. 把已有的项目代码纳入Git管理
    • cd项目代码所在的文件夹
    • git init
  2. 新建的项目直接用Git管理
    • cd某个文件夹
    • git init your_project 会在当前路径下创建和项目名称同名的文件夹
    • cd your_project
提交文件

在这里插入图片描述

  • git status 查看当前状态,可以看到有哪些文件需要修改

  • git add file_name 将工作目录下的某个文件添加到暂存区中

  • git add --all git add . 将工作目录下的所有文件添加到暂存区中

  • git commit -m'statement' 将暂存区的文件提交到版本历史中,statement为备注,-m及之后的内容可要可不要。

  • git commit -am'statement'可以不经过暂存区,直接将工作目录中的文件提交到版本历史中(不推荐)。

  • git commit --amend对最近一次commitmessage(上面的statement)做变更

修改工作目录的文件名

直接手动修改工作目录下的文件名时,在git里会出现先deleteadd的记录,通过以下命令快速修改并且不需要手动再add

  • git mv old_file_name new_file_name
HEAD和branch
  • HEAD:头指针,一般指针当前分支(分离头指针状态下不指向任何分支)。

  • git branch -v 查看本地所有的分支, -v可以省略不写(查看分支时*指向当前所在的分支)

  • git branch -a查看所有本地和远程分支

  • git branch -r查看所有的远程分支

  • git branch -vv查看本地分支与远程分支的联系

  • git branch branch_name 创建一个新分支,但是不会自动切换到该分支上

  • git checkout branch_name 切换到某个分支上

  • git checkout -b branch_name 在当前分支基础上创建一个新分支,并切换到该分支上

  • git checkout -b branch_name1 branch_name2 在branch_name2的基础创建一个新分支并切换到该分支上

  • git branch -m old_branch_name new_branch_name修改分支名

  • git push origin --delete origin_branch_name删除一个远程分支

  • git merge branch_namebranch_name分支合并到当前分支

  • git branch -d branch_name删除某个分支,如果该分支的提交未被保存到其他分支上,会提示错误信息

在这里插入图片描述

如果确实不想要该分支上的内容的话,可以使用git branch -D branch_name强制删除该分支。

通过git log查看版本演变历史
  • git log 查看所有的提交记录,q键退出查看log
  • git log 之后添加下面参数(每次可添加多个,顺序任意)
  • -n1 (n可以省略)查看最近提交的一次记录,改变数字可以查看不同数量的提交记录。
  • --onelie 每次提交的记录只显示一行
  • --graph 用图形的形式显示提交记录,最好和--oneline 参数一起使用
  • --all 查看所有分支的提交历史
查看hash值对应的object类型和内容
  • find .git/objects -type p 查看该项目版本历史中创建的所有对象

  • git cat-file -t hash_value 查看对应hash值的对象类型,如committree(文件夹,文件夹下面可以有文件夹和文件)、blob(文件)

  • git cat-file -p hash_value 查看对应hash值的内容,如果当前hash值为commit类型,则显示该commit的相关信息

在这里插入图片描述

  • 如果hash值为tree类型则可以查看该tree下面所有的treeblob(如果文件的内容相同,不管文件名是否相同,hash值均相同,为了节省空间)

在这里插入图片描述

  • 如果hash值为blob类型,使用该命令可以查看文件的内容(有些二进制格式存储的文件不能查看,如图片)

在这里插入图片描述

分离头指针

使用git checkout commit_hash切换到某一次commit历史的时候,这个时候不属于任何分支(HEAD指针没有指向任何分支),所以叫分离头指针状态(detached HEAD state)

在这里插入图片描述

在此状态下,可以像正常情况下在该commit的基础上做各种修改,如果不想保存的话,直接切换到任意分支即可,git在之后很可能会将此状态下的东西当做垃圾清理掉。所以想保存修改的话,可以将此次修改绑定到一个新的分支上即可,一般没有绑定而直接切换到其他分支的时候,git也会提醒我们。

在这里插入图片描述

让暂存区恢复成HEAD
  • git reset HEAD 恢复所有的文件
  • git reset HEAD file_name 恢复某个文件
让工作区的文件恢复为回暂存区的状态

git checkout -- file_name

恢复到之前的某次提交时的状态

git reset --hard commit_hash 这样会丢失此次提交之后的commit,谨慎使用
git reset --soft commit_hash 不会丢失此次提交之后的commit

比较不同分支或不同提交的差异

git diff HEAD HEAD~n 比较此次提交和第前n次提交的差别
git diff branch_name1 branch_name2 比较分支1和分支2的差异

git diff commit_hash1 commit hash2比较提交1和提交2 的差异

如果想知道具体某个文件的差异 ,可以加上 -- file_name

删除文件

git rm file_name 删除文件并将此次操作提交到暂存区

保存当前修改,做其他操作,然后再继续此次操作

git stash

git stash list 查看栈中保存了哪些状态

git stash apply 回到栈顶的状态

git stash pop 回到栈顶的状态并将栈顶出栈

配置公私钥

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 输入后一路回车。然后在C:\Users\user\.ssh下可以看见:
在这里插入图片描述
然后将公钥的内容复制粘贴到Github或你需要连接的服务器上

在这里插入图片描述

将本地与远端建立起连接

git remote add origin ssh_url建立连接,并将远程库取名为origin

git push origin --all 将本地所有分支都push到远程库,可以会出现冲突

git push origin branch_name 将本地当前分支推送到远程库某个分支,可以会出现冲突

将本地分支push到远端时,本地分支和远程出现冲突

git fetch ssh_url branch_name 先将远端分支拉到本地,ssh_url可以替换为https_url

git merge --allow-unrelated-histories origin/branch_name 将本地分支与拉下来的远程分支进行merge,因为此时这两个分支没有任何关联,所以需要加上--allow-unrelated-histories

git push origin branch_name最后再将此分支推送到远程库

不同人修改了同一分支的不同文件(或同一文件的不同区域),推送失败如何处理

git push后发现被拒绝

    • git fetch <远程主机名> 将远程主机上所有分支的更新拉取到本地
    • git fetch <远程主机名> <分支名>将远程主机上的某个分支拉取到本地
    • fetch完会返回一个FETCH_HEAD指针 ,指的是某个branch在服务器上的最新状态
    • 拉取完成后,通过git merge FETCH_HEAD将拉取的分支合并到当前分支
    • git pull 相当于将1中多个步骤合并为一个步骤,1中的fetch步骤可以先拉取到本地,然后用户可以再检查了以后决定是否合并(merge)到工作本机分支中
不同人修改了同一分支的同一区域,推送时如何处理
  • git push后发现被拒绝

  • git pull拉取最新代码发现出现冲突

打开出现冲突的文件,选择需要保存的内容,删掉git帮我们区分的信息(<<<<HEAD ,======, >>>>64xx)

在这里插入图片描述

然后将此文件add之后再commit,从而解决了冲突问题。

其他人修改了同一分支某个文件的文件名和文件内容,而我们也修改了此文件的内容,推送时如何处理

开出现冲突的文件,选择需要保存的内容,删掉git帮我们区分的信息(<<<<HEAD ,======, >>>>64xx)

在这里插入图片描述
然后将此文件add之后再commit,从而解决了冲突问题。

其他人修改了同一分支某个文件的文件名和文件内容,而我们也修改了此文件的内容,推送时如何处理

直接git pullgit会非常智能的帮我们合并

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/466960
推荐阅读
相关标签
  

闽ICP备14008679号