git 避免输入用户名 密码 & 二进制/文本 文件冲突解决

核心概念介绍

工作区是你当前正在进行编辑和修改的文件夹,可见的。

暂存区位于.git/index(git add放入)。

代码库(工作树)位于.git(git commit将暂存区中的更改作为一个提交保存到代码库中,并清空暂存区)

避免输入用户 密码:

方式一:

http协议:

git clone https://[email protected]/username/repository.git

ssh协议:

配置 ssh密钥,免密即可

方式二:

gitcredentials  - 为 Git 提供用户名和密码

cache 将内存中的凭据缓存一段时间。   store 无限期地将凭证存储在磁盘上。

echo "http(s)://{你的用户名}:{你的密码}@你的服务器地址" > ~/.git-credentials

git config --global credential.helper store

然后就不需要输入用户名 密码了

另外,git要求您有一个配置设置user.name,以便user.email提交/推送,没有这些配置设置git就无法将作者信息添加到提交中。

 git config --global user.name "$WSY_SERVICE_NAME"

 git config --global user.email "[email protected]"  //git config user.email 查看设置的信息

diff 比对

git diff 显示本地开发工作中已经修改但未提交至暂存区的文件和已经提交至暂存区文件的修改

git diff HEAD 显示的是已提交到工作树中文件和未提交到工作树中文件的所有修改。查看已缓存的与未缓存的所有改动。

git diff --cached 上一次最后一次提交到工作树中文件(也就是head)与暂存区内文件的改动。查看已缓存的改动。

git diff --name-only --diff-filter=U   缩写-U指定只查看产生冲突的文件 

git diff source target  比较俩个分支的差异

合并冲突

git pull origin main == git fetch origin main + git merge origin/main

执行 git pull 命令时,如果当前分支有未提交的更改,Git会提示您先commit提交更改

需要先commit,再merge合并冲突,原因如下:

直接merge 存在冲突会报错, 不会将冲突内容写入文件中(git status/git diff看不到冲突信息)如下所示:

Updating ae32fe4..adb8b80

error: Your local changes to the following files would be overwritten by merge:

        aaa.txt

Please commit your changes or stash them before you merge.

Aborting

正确做法:

先commit,然后再merge,存在冲突不会报错,会将冲突内容写入文件中(git status/git diff可看到冲突信息)如下所示

root@saas-node002:/# git merge

Auto-merging aaa.txt

CONFLICT (add/add): Merge conflict in aaa.txt

Automatic merge failed; fix conflicts and then commit the result.

git diff --diff-filter=U --name-only  // 缩写-U指定只查看产生冲突的文件  

git diff origin/main main -- aa.txt // 查看fetch下来的远端main与本端main的aa.txt差异

git status 显示当前代码库状态信息,包括未提交文件,未解决冲突文件

合并冲突见下面冲突解决部分。

额外: 强制用远程覆盖本地,不处理冲突

git fetch

git reset --hard origin/main

git pull(git fetch + git merge) 冲突解决:

git add .

git commit -m "xxx"  //必须先commit,再merge,否则不会生成如下冲突文件

git fetch && git merge

git merge --no-ff test // --no-ff 避免test分支的提交历史混入到main中,搅乱main的提交历史

1.非二进制文件在发生冲突的文件中,冲突区域有明显的标记

<<<<<<<

yours 你当前工作区的代码

=======

合并过来的代码

 >>>>>>> their

1-1.可以vim文件,手动调整解决冲突。

git add filename  #将调整后的文件标记为已解决状态

git commit && git merge  # 完成合并操作

1-2.或者基于checkout命令选择保留哪个版本的文件

git checkout --theirs conflicted_file.txt # 保留远端的

git checkout --ours conflicted_file.txt # 保留本地的

git add filename  #将调整后的文件标记为已解决状态

git commit && git merge  # 完成合并操作

2.二进制文件,Git不会尝试合并文件本身。本地文件保持不变。为了解决冲突,可使用checkout命令选择保留哪个版本的文件。

使用 git status 命令检查有冲突的文件列表。

git cat-file -s origin/main:action.png  //查看fetch下来的远端的文件大小

git cat-file -s main:action.png  //查看本地文件大小

git cat-file -p main:action.png //cat-file查看本地文件内容。(二进制文件推荐用cat-file)

git show main:aaa.txt //show查看本地文件内容 (会根据对象的类型进行一些处理和解释。对于文本文件,它会尝试以可读的文本形式显示文件内容;对于二进制文件,它默认会以十六进制字符的形式显示内容)

git checkout --theirs conflicted_file.txt # 保留远端的

git checkout --ours conflicted_file.txt # 保留本地的

git add filename  # 将已解决的文件标记为已解决状态

git commit && git merge

你可能感兴趣的:(git)