其他分享
首页 > 其他分享> > Git多人协作

Git多人协作

作者:互联网

添加SSH

首先安装完之后配置git

git config --global user.name "your_name"
git config --golbal user.email "your_email"

创建ssh,命令会在

ssh-keygen -t rsa -C "youremail@example.com"

创建GitHub仓库

首先在GitHub上创建一个仓库,添加一个md文件

本地上传

进入到本地要关联的文件夹中,运行git init初始化本地仓库为git可以管理的文件,然后运行git remote add origin git@github.com:your_name/your_repos.git将本地与GitHub上的lee2020spring仓库关联起来,由于现在GitHub的默认源代码仓库名为main,因此用git branch -M main将master修改为main。

之后由于本地和远程的内容不同步,而且我们在远程创建了一个md文件,因此我们需要先将远程的md文件pull下来,运行git pull --rebase origin main,其中--rebase的意思是取消本地库中的commit,并将他们接到更新后的版本库之中,此时本地和远程已经同步,可以将本地的内容push到远程了,运行git add . git commit -m "first commit" git push -u origin main -u只有在第一次push时使用,其他时候可以不用

命令汇总

git init                         # 初始化仓库
git remote add origin git@github.com:your_name/your_repos.git  # 将远程仓库和本地关联起来
git branch -M main               # 将本地改为main
git pull --rebase origin main    # 将远程仓库的内容pull到本地(同步)
git add .                        # 将本地仓库内容添加到缓存区
git commit -m "first commit"     # 将缓存区的内容添加到工作区
git push -u origin main          # 将工作区的内容添加到远程仓库

修改、添加、删除文件

删除某个文件使用git rm a.txt

修改和添加某个文件使用git add a.txt

命令汇总

git add -A   # 提交所有变化     
git add -u   # 提交被修改modified和被删除deleted的文件,不包括新文件new
git add .    # 提交新文件new和被修改modified的文件,不包括被删除的文件deleted

创建分支

一般来说我们希望main分支的内容都是正确的,然后每次多人进行修改时都分别在各自的分支进行修改,如果修改完毕在将main分支merge过来,

一开始的时候只有mater分支每次提交master都会向前移动一步,在这个过程中HEAD始终指向master

  • 1-->2-->3(master)

当我们创建新的分支(dev)时,指向master,再把HEAD指向dev,表示当前分支在dev上

  • 1-->2-->3(master, dev)-->4
  • 1-->2-->3(master)-->4(dev)

当在dev的工作完成时,把dev合并到master上,直接将master指向dev即可,合并完后就可以删除dev分支了,只剩下master

  • 1-->2-->3-->4(master, dev)
  • 1-->2-->3-->4(master)

git checkout -b dev创建并切换分支,这时我们可以在dev分支上进行操作,当我们修改完之后进行commit,然后执行git checkout main切换到原分支,使用git merge dev将其合并,然后用git branch -d dev删除dev分支即可

注意:在合并分支时,如果使用git merge dev属于快速合并Fast-Forward,不会有commit记录,但是如果使用git merge --no--ff -m "commit" dev会关闭快速合并,使用git log --graph --pretty=oneline --abbrev-commit会在提交历史中看到合并的这一次提交

命令汇总

git branch             # 查看当前分支
git checkout -b dev    # 创建并切换分支
git switch -c dev
git checkout main	   # 切换分支
git switch main  
git merge dev          # 合并分支
git merge --no-ff -m "commit" dev
git branch -d dev      # 删除分支
git log --graph --pretty=oneline --abbrev-commit  # 查看提交记录

Git的具体应用场景

  1. 创建版本库并且提交
git init               # 初始化
git add <file>         # 将文件添加到stage
git commit -m "info"   # 将文件提交到版本库
  1. 查看work的状态
git status
  1. 查看文件修改内容
git diff <file>
  1. 查看历史提交记录(日志)
git log                        
git log --pretty=oneline  # 只输出一行
git log --graph           # 查看分支合并图
git log --graph --pretty=oneline --abbrev-commit
git reflog                # 记录历史提交日志
  1. 回退到某个版本
git reset --hard HEAD^         # 回退到上个版本
git reset --hard HEAD^^        # 回退到上上个版本
git reset --hard HEAD~100      # 回退到上100个版本
git reset --hard <version id>  # 回退到某个版本
  1. 在未commit之前撤销修改
# 1. 修改后未提交到stage,撤销会回到和版本库一样的状态 
git checkout -- <file>
# 2. 修改后提交到了stage,然后在工作区又做了修改,撤销会回到添加到stage后的状态,即与stage的内容一致
git checkout -- <file>
  1. 将stage的文件撤回
git reset HEAD <file>

如果将stage的文件撤回后,想继续放弃在work里面的更改,使用第六条git checkout -- <file>命令

  1. 添加文件用add,删除用rm
# 如果将work处的某个文件删除了,使用如下命令
git rm <file>
git commit -m "info"
  1. 创建SSH
# 创建完后ssh在.ssh文件中
ssh-keygen -t rsa -C "your_email"
  1. 将本地内容推到GitHub上
# 1. 在GitHub上创建一个同名仓库
# 2. 将本地仓库与GitHub上的仓库关联
git remote add origin git@github.com:<your_name>/<repos_name>.git
# 3. 将本地内容推到远程仓库,-u只在第一次推时使用,作用是将main内容推到远程main分支,并将本地main和远程main关联起来
# 注意在推到远程时必须保证二者的内容已经同步,在我第一次使用时由于远程仓库有一个md文件,没能同步,所以应该先用git pull --rebase origin main将远程的md拉到本地进行同步,然后使用push命令
git push -u origin main
  1. 创建并合并分支
# 1. 创建分支
git checkout -b dev       # 创建dev分支并切换,等价于-->git branch dev && git checkout dev
git switch -c dev
# 2. 切换分支
git checkout main         # 切换到main分支
git switch main
# 3. 合并分支
git merge dev             # 合并dev分支(Fast-forward合并)
git merge --no-ff -m "merge_info" dev  # 普通合并,会有commit提交记录
# 4. 删除分支
git branch -d dev         # 删除dev分支
git branch -D dev 	   	  # 强制删除dev分支
git branch                # 查看当前分支
  1. 如果main分支和dev分支同时进行了更改和commit

此时是没有办法进行git merge dev的,需要将冲突解决

# 1. 查看冲突发生在哪里
git status
# 2. 修改冲突
vim <file>
# 3. 删除分支
git branch -d dev
# 4. 查看分支合并图
git log --graph --pretty=oneline --abbrev-commit
  1. 如果main的项目还没结束,自己在dev分支上修改了一部分内容,突然发现了一个bug,然后需要先把bug修复在进行之后的工作
# 流程: main(出了bug)- issue101(2. 回到main分支并创建新分支issue101)
#       dev(1. 目前正在dev进行了一部分工作)
# 1. 首先将现场存储
git stash      
# 2. 此时运行git status工作区是干净的,回到main分支并创建新分支issue101
git checkout main
git checkout -b issue101
# 3. 此时在issue101上修改自己的bug,然后进行提交
git add <file>
git commit -m "fix bug"
# 4. 回到main分支上merge完成bug的修改
git switch master
git merge --no-ff -m "merge fix bug" issue101
# 5. 回到最初的dev分支,恢复现场
git switch dev
git stash list  # 查看存储的工作现场
git stash pop   # 将现场恢复并删除之前保存的现场,等价于-->git stash apply && git stash drop
# 6. 修改dev的bug,之前issue101的bug代号记住,仅将这个修改merge到dev分支
git cherry-pick <issue101_id>
  1. 多个人一起进行某个项目

在开发时,一般有多个分支,这里假设为两个,一个main分支,一个dev分支,远程仓库的默认名称为origin。这里讲述了多个人一起协作时的流程

# 1. 抓取分支
git clone git@github.com:harrytea/<repos_name>.git
git branch  # 只会显示一个分支main
# 2. 将远程的dev分支也抓取到本地,当对dev进行修改时,可以随时push到远程
git checkout -b dev origin/dev
git add <file>
git commit -m "info"
git push origin dev

# 命令
git remote      # 查看远程库的信息
git remote -v   # 查看远程库的详细信息
git push origin main    # 推送main分支
git push origin dev     # 推送dev分支

Q1:在别人进行提交之后如果你也进行了修改,无法提交怎么办?

git add <file>
git commit -m "info"
git push origin dev  # 推送失败
# 使用git pull将前一个人的最新提交抓下来,然后本地合并
git pull  # 可能会失败,因为dev和远程origin/dev没有连接
git branch --set-upstream-to=origin/<dev> dev
git pull  # 再次使用git pull,如果再出现了冲突,查看上面的12条解决

标签:main,git,--,dev,Git,多人,commit,协作,分支
来源: https://www.cnblogs.com/harrytea/p/15314609.html