目录
设置用户签名
- 配置用户名,"name"指的是github账号的名称
git config --global user.name "name"
- 配置邮箱,"email"指的是github账号的email地址
git config --global user.email "email"
查看Git配置
列出当前Git配置中的所有设置。它会显示所有全局和用户级别的配置项,包括用户名、电子邮件地址、默认文本编辑器等。
git config --list
查看Git版本信息
git --version
初始化本地库
在本地创建一个新的Git仓库。在当前目录下会有一个名为“.git”的隐藏文件夹,其中包含Git仓库的所有元数据。
git init
git add
将文件添加到 Git 的暂存区,以便进行版本控制。
- 将单独一个文件添加到暂存区
git add <文件名>
- 将整个目录添加到暂存区(暂存区不能存放空文件夹)
git add <目录名>
- 将所有文件添加到暂存区
git add --all #简写 git add .
- 如果要添加多个文件,可以使用通配符来匹配多个文件。例如,要将所有以 `.txt` 结尾的文件添加到暂存区,可以使用以下命令:
git add *.txt
`git add` 命令的常用选项:
- -A :提交所有变化,包括新建、修改和删除的文件。
- --all :与 `-A` 相同。
- -u :提交被修改和被删除的文件,不包括新文件。
- --no-ignore-removal :如果文件已被删除,则不会将其添加到暂存区中。
在执行 `git add` 命令后,Git 会将这些文件标记为已修改,并将它们添加到暂存区中。
git rm
将文件从暂存区和工作区中删除。
git rm -选项 <文件名>
`git rm` 命令有以下几个选项:
- -r :递归删除目录及其子目录。
- -f :强制删除文件,不询问确认。
- --cached :只从暂存区中删除文件,不从工作区中删除。
- --ignore-unmatch :忽略与模式匹配不完全的文件。
- --no-ignore-remova :不允许忽略被删除文件的跟踪信息。
git status
显示当前工作区和暂存区的状态。它会列出所有已修改但未提交的文件,以及它们在工作区和暂存区中的位置。
git status
- Untracked files:文件或文件夹在工作区中,但还没有添加到暂存区,未被 Git 跟踪的文件。
- Changes to be committed:表示该文件已被修改,但尚未提交。
- Changes not staged for commit:表示该文件已被添加到暂存区,但尚未提交。工作区和暂存区的文件内容可能不一致;文件已经添加到暂存区后,又在工作区修改了文件内容。
git commit
将暂存区中的更改提交到本地仓库。在执行
git commit
命令时,你需要指定一个提交信息,用于描述这次提交的更改内容。git commit -m "提交信息"
-m
:
指定提交信息。
-a :
自动将所有已修改的文件添加到本地仓库。
-p
:
交互式地选择要提交的文件。这个选项允许你在提交之前查看每个文件的差异。
-C :
撤销最近一次提交。如果你想撤销最近一次提交,可以使用这个选项。
-s :
强制提交。如果你想要强制提交更改,可以使用这个选项。执行
git commit
命令后,Git 会将暂存区中的更改合并到本地仓库中,并创建一个新的提交记录。这个新的提交记录包含了你所做的所有更改以及提交信息。
git log
查看提交历史记录。它可以显示每个提交的哈希值、作者、日期和提交信息等信息。
git log
git reflog
查看引用日志,它可以显示每个引用的变化历史记录。
git reflog
- 结果图:
- git log 和 git reflog的不同
git log只能查看到当前指针及之前的操作记录;
git reflog可以查看到当前本地库中所有的操作记录。
git reset
重置当前分支到指定的提交或分支。(不建议使用git reset,推荐使用git revert)
#回退到上一次提交的版本,回退到工作区 git reset --hard HEAD^ #回退到上一次提交的版本,回退到暂存区 git reset --soft HEAD^ #回退到上上次提交的版本 git reset --hard HEAD^^ git reser --hard HEAD~2 #相当于重置到当前版本,没有变化 git reset --hard HEAD #可以通过commit-id进行重置到指定版本 git reset --hard ae27abb
回退到上一次提交的版本示例图:
常用的选项如下:
--hard
:强制重置,会丢失所有未提交的更改,回退到工作区。
--soft
:软重置,只会丢失未提交的更改,回退到暂存区。
--mixed
:混合重置,会丢失未提交的更改和已暂存的更改。
<commit>
:指定要重置到的提交。
<branch>
:指定要重置到的分支。
git revert
撤销一个或多个提交。
#撤销一个提交,回到上一个提交。不用加^,加了就回到上上个提交了,与git reset做好区分 git revert --hard HEAD
- git reset 与 git revert的不同
git reset 是回滚到对应的commit-id,相当于是删除了commit-id以后的所有的提交,并且不会产生新的commit-id记录,如果要推送到远程服务器的话,需要使用 -f 强制推送;
git revert是撤销其中的commit-id,然后重新生成一个commit-id。本身不会对其他的提交commit-id产生影响,如果要推送到远程服务器的话,就是普通的操作git push就好了。
git branch
1、列出所有本地分支
git branch
2、创建分支
git branch <分支名>
3、切换分支
git checkout <分支名>
4、合并分支
git merge <分支名>
5、删除分支
git branch -d <分支名>
常见的选项:
-a :
列出所有的本地和远程分支,包括隐藏的分支(以 .开头的分支)。
-r :
列出远程分支,包括已删除的分支。
-d :
只显示已删除的分支。
-f :
强制创建一个新分支,即使该分支已经存在。
-m :
将当前分支合并到指定的分支上。
<branch_name> :
只显示指定名称的分支。
git merge
用于合并分支的 Git 命令。它可以将一个分支的更改合并到另一个分支,从而创建一个新的提交。
git merge <分支名> # 将 source_branch 的提交历史记录合并到 target_branch 上 git checkout target_branch git merge source_branch
git rebase
将另一个分支上的更改应用到当前分支上,并自动重写当前分支的提交历史。这意味着在重写后的提交历史中,所有分支的更改都会以连续的提交记录出现,并且当前分支的提交历史会被“变基”到另一个分支的提交历史之上。
git rebase <分支名> # 将source_branch分支的历史记录应用到target_branch分支上 git checkout target_branch git rebase source_branch
git merge 和git rebase的区别及注意事项
git merge 和 git rebase 都是用于将一个分支的更改合并到另一个分支上的命令,但它们之间有一些区别和注意事项:
git merge
- git merge 会创建一个新的提交记录,将两个分支的更改合并在一起。这意味着在合并后的提交历史中,每个分支的更改都会以单独的提交记录出现。
- git merge 通常用于将多个独立的功能或修复合并到同一个分支上。
- 如果在合并过程中发生冲突,需要手动解决冲突并继续执行
git merge
。- git merge 可以保留分支之间的历史差异,因此可以更容易地回滚到之前的版本。
git rebase
- git rebase 会将一个分支上的更改应用到另一个分支上,并自动重写提交历史。这意味着在重写后的提交历史中,所有分支的更改都会以连续的提交记录出现,使得提交历史更加整洁。
- 如果在执行
git rebase
时发生冲突,需要手动解决冲突并继续执行git rebase
。- git rebase 不能保留分支之间的历史差异,因此如果需要回滚到之前的版本,需要使用其他方法(如
git reset
)。总之,如果你需要保留分支之间的历史差异并且不介意提交历史中的冗余信息,可以使用
git merge
。如果你希望简化提交历史并避免冗余信息,可以使用git rebase
。
解决本地分支冲突问题
确定冲突的文件:使用
git status
命令查看哪些文件存在冲突。如果有多个文件存在冲突,可以使用git status --name-only
命令仅显示文件名。手动解决冲突:打开冲突的文件,找到冲突的部分,手动编辑并解决冲突。
保存并关闭文件:完成手动解决冲突后,保存并关闭文件。
提交解决后的文件:使用
git add
命令将解决后的文件添加到暂存区。提交解决冲突的信息:使用
git commit
命令提交解决冲突的信息。在提交信息中,应该包含一个描述冲突的简短说明,以及你对解决冲突所做的更改。例如,假设你有二个文件存在冲突:
file1.txt
、file2.txt
。你可以使用以下命令手动解决这些冲突:git status --name-only # 输出: file1.txt file2.txt # 打开文件并手动解决冲突 # 添加到暂存区 git add file1.txt file2.txt # 提交解决冲突的信息 git commit -m "file1.txt, file2.txt冲突已解决"
如果你不想解决冲突,可以使用--abort选项中止冲突
git merge --abort
如果你不想手动解决冲突,也可以使用第三方工具(如KDiff3、Beyond Compare等)来帮助你自动解决冲突。
git remote
- `git remote add` 是一个用于向 Git 仓库添加远程仓库的命令。
git remote add <远程仓库名> <远程仓库URL>
- `git remote remove` 是一个用于删除与当前仓库关联的远程仓库的命令。
git remote remove <远程仓库名>
- 列出与当前仓库关联的所有远程仓库。这个命令会显示每个远程仓库的名称、URL 以及默认分支。
git remote -v
git push
将本地仓库中的更改推送到远程仓库
git push <远程仓库名> <本地仓库分支名>:<远程仓库分支名> #示例,远程仓库名为origin,本地仓库分支名和远程仓库名都是master git push origin master:master #可以简写 git push origin master
git push -u
命令的-u
选项是用来将本地仓库和远程仓库关联起来的。使用该选项后,Git 将自动跟踪本地仓库和远程仓库之间的同步状态,而不需要手动管理它们之间的同步状态。git push -u origin master #以后推送的时候,远程仓库和分支都不变的话,直接git push就行了 git push
git pull
将远程仓库中的更改拉取到本地仓库中。
#要与git push命令做好区分,分支名的顺序是不一样的 git pull <远程仓库名> <远程仓库分支名>:<本地仓库分支名> #示例,远程仓库名为origin,本地仓库分支名和远程仓库名都是master git pull origin master:master #可以简写 git pull origin master #若之前使用过-u选项,git会自动跟踪远程仓库和本地仓库的同步状态,直接git pull就行了 git pull
多分支管理,将远程仓库的指定分支拉取到本地仓库,并创建对应的本地仓库分支
#将远程仓库分支test拉取到本地仓库 git pull origin test #查看所有分支,只有远程分支test,没有本地分支test git branch -a #使用git checkout切换分支就会自动创建本地分支test,并会跟踪远程分支test git checkout test
解决远程仓库与本地仓库的冲突问题
使用
git pull
命令,当你从远程仓库拉取更新时,如果有冲突,Git 会提示你解决冲突。在这种情况下,你需要手动编辑文件并解决冲突,然后提交更改。#从远程仓库拉取更新,查看冲突文件 git pull #打开文件并手动解决冲突 #提交更改,冲突解决完毕 git add . git commit -m "解决冲突记录" git push
git clone
从远程仓库克隆(复制)项目到本地的 Git 命令。
git clone <仓库地址> #<仓库地址>是你要克隆的远程仓库的URL git clone https://github.com/user/example.git
删除远程仓库分支
如果需要删除远程仓库的分支,使用git push命令,本地仓库分支名为空,就可以实现删除远程仓库分支了
git push <远程仓库名> :<远程仓库分支名> #例:删除远程仓库origin的fixbug分支 git push origin :fixbug
跨团队合作
使用 fork 和 pull request进行跨团队合作 。
主仓库维护者在 GitHub 上创建一个新的仓库,并将项目代码 clone 到本地。
其他团队成员在 GitHub 上找到主仓库,点击 "Fork" 按钮,将主仓库复制到自己的账户下。
然后在自己的仓库中进行修改,再使用
git add
、git commit
和git push
命令将修改推送到自己的仓库。最后在 GitHub 上找到被 fork 的仓库,点击 "New Pull Request" 按钮,选择要合并的分支(通常是主仓库的分支),填写简短的描述和评论,然后提交 pull request。
主仓库维护者收到 pull request 后,可以查看代码修改内容,进行代码审查和测试,然后决定是否接受 pull request。如果接受,主仓库维护者会将修改合并到主仓库的分支,并将更新后的代码推送到远程仓库。
如果主仓库维护者拒绝了 pull request,其他团队成员可以再次修改代码,然后重新提交 pull request。
通过使用 fork 和 pull request,不同团队之间可以更加方便地协作,避免直接修改主仓库导致的冲突问题。
.gitignore文件
用于配置 Git 的文本文件,它告诉 Git 哪些文件或文件夹应该被忽略,不纳入版本控制。在项目中,
.gitignore
文件通常位于项目的根目录下。
- 忽略特定名称的文件或文件夹:
# 忽略名为 "temp" 的文件夹 temp/ # 忽略名为 "temp.log" 的文件 temp.log
- 忽略特定类型的文件(使用通配符*):
# 忽略所有 .log 文件 *.log # 忽略所有 .tmp 文件 *.tmp # 忽略所有 .bak 文件 *.bak