git常用命令以及冲突解决

基本命令

删除公钥
rm ~/.ssh/id_rsa
rm ~/.ssh/id_rsa.pub

1. 生成公钥
ssh-keygen -t rsa -C "xxx@xxx.com"
2. 配置信息
git config --global  user.name "xxx"
git config --global  user.email "xxx@xxx.xx.x"
3. 连接远程仓库
git remote add origin 仓库地址
git remote add origin 
// 例如
git remote add react xxxxxx.git

查看是否连接成功
git remote -v
删除连接   origin
git remote rm origin
4. 拉取分支代码
 git pull origin 分支名

5. 创建分支并且切换
git add . 
git commit -m "111"
git checkout -b xxxx
git checkout -b main
5.1 查看分支状态
git branch

6. 提交信息
git add .
git commit -m "提交的备注"

7.上传到新分支
git push origin main【分支名】


git push origin 

冲突

原因 :

提交者的版本库信息 小于 远程库的版本

解决方法 首先保证 提交者的版本信息 和 远程库的版本信息是一致的 然后再提交

那么如何保证提交者的本地仓库和远程仓库版本一致呢?

使用 git pull

一,自动解决冲突


比如程序员 a 维护一个函数 a 的代码,程序员 b 维护 b 函数的代码

a 首先提交修改了 a 函数, 而 b 的本地并没有 a 修改的信息 导致 b 和远程仓库不一样导致的冲突, 需要先使用 git pull 把 程序员 a 提交的代码拉到自己本地 在 push 提交自己代码

PS C:\Mac\Home\Desktop\TTTTT\git-conflict-test> git push origin main
To https://git.xxxx.ac.kr/weierhang/git-conflict-test.git
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'https://git.xxx.ac.kr/xxx/git-conflict-test.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

二, 手动解决冲突

  1. 内容冲突\

如果多个开发者修改了同一段代码或同一个文件的不同部分,Git 将无法自动合并,需要手动解决冲突。例如:

  • 程序员 A 和程序员 B 都修改了同一个函数。
  • 在这种情况下,当程序员 B 执行 git pull 后,会看到冲突标记,需要手动编辑有冲突的文件,选择保留哪部分修改或者进行合并。

手动打开冲突的文件内容

会看到这种

<<<<<<< HEAD
这是你的本地修改
=======
这是来自远程分支的修改
>>>>>>> 分支名
  • <<<<<<< HEAD 表示你本地分支的更改。
  • ======= 是分隔线,分隔本地更改和远程更改。
  • >>>>>>> 分支名 表示来自远程仓库的更改。

然后通过团队沟通看看需要保留哪一部分,或者将两者合并

  • 如果你只想保留本地修改,可以删除冲突标记和远程分支的更改。
  • 如果你只想保留远程分支的更改,则删除冲突标记和本地的更改。
  • 如果你需要合并两者的修改,可以手动编写一个合并后的版本,并删除冲突标记。

编辑之后再使用

git add <冲突文件>

git commit

push


总的来说,Git 冲突可以分为两大类:自动解决的冲突需要手动解决的冲突

1. 自动解决的冲突

自动解决的冲突是指本地的版本库内容比远程仓库旧,但两者的更改互不干涉,Git 可以自动合并这些更改。例如,假设开发者 A 和 B 分别维护两个方法,A 修改并提交了 `methodA`,而 B 在不知情的情况下修改了 `methodB`。由于这两者的修改在不同的代码部分,不存在冲突,B 只需要执行 `git pull` 将 A 的更改拉取到本地,然后再 `git push`,Git 就能自动合并这些更改并推送到远程仓库。

2. 需要手动解决的冲突

当多个开发者对同一个文件的同一部分做了不同的更改,Git 无法自动合并时,就需要手动解决冲突。这种情况又可以分为两种常见类型:

内容冲突

内容冲突发生在两个开发者同时修改了同一个文件的同一行代码时。例如,A 修改了 `methodA` 并提交了更改,而 B 也修改了 `methodA` 并尝试提交。此时,B 会遇到冲突提示。B 需要先执行 `git pull` 将 A 的更改拉取到本地,文件中会显示冲突标记 `<<<<<<<`。然后,B 需要手动编辑冲突文件,选择保留谁的修改,或合并两者的代码。最后,删除冲突标记,执行 `git add` 和 `git commit` 解决冲突,并完成 `git push`。

删除修改冲突

删除修改冲突发生在一个分支修改了文件,而另一个分支删除了同一个文件的情况下。例如,在 `branch1` 中对 `conflict.txt` 进行了修改,而在 `branch2` 中删除了这个文件。当尝试将 `branch2` 合并到 `branch1` 时,Git 无法确定是否应该保留该文件。这时可以通过 `git status` 查看哪些文件存在冲突,然后手动选择是保留文件还是删除文件,解决冲突后提交更改。

3. 解决冲突的基本流程

无论是哪种冲突,解决的基本流程都是:
  1. 执行 git pull 拉取远程仓库的最新更改。
  2. 手动编辑冲突文件,解决冲突。
  3. 使用 git add 将解决后的文件标记为已解决。
  4. 提交解决后的结果:git commit
  5. 重新推送到远程仓库:git push

git merge与git rebase的区别

```java z ```
posted @ 2024-11-12 14:50  小杭呀  阅读(146)  评论(0)    收藏  举报