前期准备:
1、安装
2、身份认证
git config --global user.name "your_username"
git config --global user.email your_email@domain.com
git config --list 查看所有配置
常见的Git命令
git status .
命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到 了, 哪些没有, 哪些文件没有被Git tracked(跟踪)到。
git init
初始化git 本地仓库.在本地文件自己指定位置,通过执行 git init 命令在本地初始化一个本地仓库,执行该命令后会在本地初始化一个 没有任何文件的空仓库。
git add -A 将编辑的全不 / git add + 文件路径
git add path 通常是通过git add <path>的形式把<path>添加到索引库中,<path>可以是文件也可以是目录。
git不仅能判断出<path>中,修改(不包括已删除)的文件,还能判断出新添的文件,并把它 们的信息添加到索引库中。
git commit -s 自己写message / git commit -m "message" message就是自己搞的内容
命令用于将更改记录(提交)到存储库。将索引的当前内容与描述更改的用户和 日志消息一起存储在新的提交中。通常在执行提交时 在 git commit 命令后跟上 -m 属性 加入本次提交的记录说明(注释)方便后续查看提交或改动记录。
git log :命令用于显示提交日志信息。
git diff . 查看所有修改文件的信息
git diff + file path 查看某个文件的修改信息
差异比较说明
`---`:表示变动前的文件
`+++`:表示变动后的文件
变动的位置用两个@作为起首和结束
@@ -1,2 +1,3 @@:减号表示第一个文件,"1"表示第1行,"2"表示连续2行。同样 的,"+1,3"表示变动后,成为第二个文件从第1行开始的连续3行。
git checkout . / git checkout <file>
清除修改但未提交暂存区的代码
git reset . / git reset + filePathName 一个是全部文件一个是单个文件
git rm --cache <file> <file> / git rm --cache .
暂存区文件撤销(撤销git add .保存的文件)
(撤销git commit保存的文件)
git reset --hard + commit-id 回退版本消去修改的代码
git reset --soft + commit-id 回退版本保留修改的代码
git reset --hard HEAD~1 回退版本是HEAD指向的前一个的位置,不保留修改的代码
git reset --soft HEAD~1 回退版本是HEAD指向的前一个的位置,保留修改的代码
将本地代码连接到远程仓库
- 首先,将本地代码库初始化为Git仓库(如果尚未完成):
git init- 添加远程仓库的URL,其中
<remote-name>
是自定义名称,<remote-url>
是远程仓库的URL:
git remote add <remote-name> <remote-url>- 可以使用以下命令确认远程仓库是否已成功添加:
git remote -v- git remote add origin 链接再次与远程仓库进行连接
git push
git fetch
获取远程仓库的最新提交信息:Git 会联系远程存储库,检查远程分支的最新提交,以及本地分支与远程分支之间的差异。
更新本地存储库:Git 会将远程分支的提交信息和对象下载到本地存储库中,以便在以后进行比较和合并操作时使用。这些提交信息存储在本地存储库的一个特殊区域中,称为 "远程跟踪分支"(remote-tracking branch)。
不自动合并:与 "pull" 命令不同,"fetch" 操作不会自动合并远程分支的更改到当前分支。这允许您在检查远程仓库的更新后,决定何时以及如何集成这些更改。
"fetch" 操作的主要优势在于它提供了更多的控制和安全性。通过执行 "fetch",您可以查看远程分支的更改,然后决定是否要将这些更改合并到您的本地分支。这使您有机会审查和测试更改,以确保它们与您的代码兼容,然后再将它们合并到本地分支中。
eg. git fetch remote_name
git pull 把资源更新到最新的地方
克隆代码
git clone + "远程仓库URL" / git clone + "远程仓库URL" + filedirectory 拉到某个新建名字叫filedirectory的目录下
git branch 获取当前分支名
git branch -a 获取当前仓库下的所有分支
git checkout <分支名> 切换到某个分支
git checkout -b <分支名> 创建并立即切换到该分支
git checkout -t <分支名> 创建名为分支名的分支并切换到该分支
git merge <branch-name> 合并分支
打patch
将patch里面的cherry-pick的链接复制下到代码仓,直接就可以将改动应用到当前了
git status . 可以查看冲突情况
在Git中,如果你的本地分支落后于远程仓库(origin),并且
git pull
命令无法将你的本地分支更新到最新代码,你可以尝试以下几种方法来解决问题:
-
使用
git fetch
命令: 首先,运行git fetch origin
命令,它会从远程仓库(origin)下载最新的变更,但不会自动合并到你的当前分支。然后,你可以手动合并远程分支到你的本地分支:git fetch origin git merge origin/branch_name
这里的
branch_name
是你想要合并的远程分支的名称。 -
使用
git pull
命令并指定远程分支: 如果你想要使用git pull
命令,你可以指定要拉取的远程分支的名称,这样可以确保从正确的分支拉取代码。例如:git pull origin branch_name
这里的
branch_name
是你想要拉取的远程分支的名称。 -
强制推送(慎用): 如果你确定你的本地修改不会影响其他人的工作,并且你想要覆盖远程分支上的代码,你可以使用强制推送(force push)。但是,强制推送可能导致其他人的工作丢失,因此在使用之前需要慎重考虑。使用以下命令来强制推送本地分支:
git push origin branch_name --force
在使用强制推送之前,请确保你了解可能引发的潜在问题,并与团队成员协作,以避免造成不必要的冲突和数据丢失。
-
手动合并变更: 如果以上方法都无法解决问题,你可以手动合并变更。使用
git log
命令查看你的本地分支和远程分支的提交历史,找出差异,然后手动合并这些变更。
git log
命令默认只显示本地分支的提交历史。如果你想查看远程分支的提交历史,你可以使用以下命令: git log origin/branch_name
这里的branch_name
是你想要查看的远程分支的名称。上述命令会显示指定远程分支的提交历史记录。如果你想查看所有远程分支的提交历史,可以使用--all
选项:git log --all
这会显示所有本地分支和远程分支的提交历史。你也可以通过-p
选项查看每个提交的详细变更信息:git log -p origin/branch_name
上述命令会显示指定远程分支的详细变更信息。
请注意,使用git log
查看远程分支的提交历史时,只能查看本地仓库中已经拉取(或者说git fetch
)下来的远程分支的历史记录。如果你的本地仓库没有更新远程分支的信息,可以使用git fetch
命令先更新远程分支的信息,然后再使用git log
查看远程分支的提交历史。
使用git rebase
可以将你的本地提交变基(rebase)到远程分支的最新提交上,从而将你的修改放在远程分支的最新代码之上。这样可以保持提交历史的清晰,并且避免创建额外的合并提交。以下是使用git rebase
解决你的问题的步骤:
-
确保你在正确的分支上: 首先,请确保你在要操作的本地分支上。使用
git branch
命令查看当前所在分支,并切换到你要操作的分支(如果不在的话):git branch git checkout your_branch_name
这里的
your_branch_name
是你要操作的本地分支的名称。 -
拉取远程分支的最新代码: 运行以下命令从远程仓库(origin)拉取最新的代码和分支信息:
git fetch origin
-
将本地分支变基到远程分支上: 运行以下命令将你的本地分支变基到远程分支的最新提交上:
git rebase origin/branch_name
这里的
branch_name
是你要变基到的远程分支的名称。如果在变基的过程中发生冲突,Git 会暂停变基操作,让你解决冲突。你可以使用
git status
命令查看哪些文件有冲突,手动解决冲突后,使用git add
命令标记为已解决,然后使用git rebase --continue
继续变基。 -
完成变基: 一旦解决了所有冲突并且完成了变基操作,你可以使用
git log
命令来确认你的本地分支现在包含了远程分支的最新代码。git log
-
推送变基后的分支: 如果你的本地分支只有你自己在使用,并且你确定不会影响其他人的工作,你可以使用强制推送(force push)将变基后的分支推送到远程仓库:
git push origin your_branch_name --force
注意:强制推送会覆盖远程分支的历史,所以在团队协作的环境中,请谨慎使用强制推送,以免造成不必要的冲突和数据丢失。
通过这些步骤,你可以使用git rebase
命令将你的本地分支与远程分支同步,同时保持提交历史的整洁。
非常用但好用
-
git rerere
:git rerere
表示"reuse recorded resolution",它允许 Git 记录和自动重用冲突解决方案。如果您在多次合并中遇到相同的冲突,git rerere
可以自动帮助您应用以前的解决方案,节省时间和减少冲突解决工作。 -
git log --oneline
:使用--oneline
选项可以将提交历史以一行的形式显示,使其更加紧凑和易于阅读。 -
git add -p
:使用-p
选项,可以逐个或交互式地添加文件的部分更改。这允许您精确控制哪些更改将包含在下一次提交中。 -
git commit --amend
:git commit --amend
允许您在不创建新提交的情况下修改最后一次提交。这对于添加遗漏的文件、修复提交消息或合并提交非常有用。 -
git log --stat
:使用--stat
选项,git log
将显示每个提交中修改的文件以及文件中的插入和删除行数的摘要信息。 -
git grep
:git grep
命令用于在整个仓库中搜索文本。它可以搜索源代码、提交消息等内容,帮助您查找特定的字符串或模式。 -
git mergetool
:git mergetool
命令可以配置和使用图形化的合并工具来解决冲突。这对于处理复杂的冲突情况或对合并工具有偏好的开发人员很有用。 -
git log --graph --all
:使用--graph
和--all
选项,git log
将显示提交历史的图形表示,包括所有分支的情况,使得分支和合并关系一目了然。 -
git shortlog
:git shortlog
命令以一种更简洁的方式显示提交历史,通常用于生成贡献者的简短报告。 -
git stash
:git stash
命令用于将当前工作目录中的未提交更改保存到一个临时区域,以便您可以切换到其他分支或执行其他操作。这对于在不完全提交更改的情况下切换分支非常有用。 -
git bisect
:git bisect
命令帮助您快速找出导致问题的提交。您可以告诉 Git 一个已知的好提交和坏提交,然后 Git 会自动二分查找问题所在的提交。 -
git reflog
:git reflog
命令允许您查看仓库的引用日志,这包括分支、HEAD 等引用的历史记录。这对于恢复意外删除的分支或提交非常有用。 -
git cherry-pick
:git cherry-pick
命令用于选择并应用单个提交到当前分支,而不是合并整个分支。这在需要将某些特定更改从一个分支移动到另一个分支时非常有用。 -
git worktree
:git worktree
命令允许您在同一仓库中创建多个工作目录,每个工作目录可以关联到不同的分支。这对于同时在多个分支上工作非常有用,而不必来回切换。 -
git log
高级选项:git log
命令有许多高级选项,例如--graph
(显示提交图)、--since
和--until
(按时间过滤提交)、--grep
(按消息过滤提交)等,可以用于查看提交历史和分析项目的演变。 -
git blame
:git blame
命令用于逐行查看文件的历史修改记录,显示每行代码最后一次修改的提交和作者。这有助于了解每行代码的来源和历史。 -
git clean
:git clean
命令用于删除未受版本控制的文件和目录,这些文件通常是通过构建过程或其他操作生成的。使用-n
选项可以查看将被删除的文件列表,使用-f
选项才会真正执行删除操作。 -
git add -i
:使用-i
选项,可以进入交互式模式,允许您选择要添加的文件、部分更改或进行其他与缓存区相关的操作。 -
git diff --word-diff
:使用--word-diff
选项,git diff
将以单词为单位而不是行为单位来显示更改,这使得更容易理解和回顾代码更改。 -
git log --since
和git log --until
:这些选项允许您根据日期范围来过滤提交历史,例如git log --since="2 weeks ago"
或git log --until="2023-01-01"
。 -
git blame -L
:git blame
命令的-L
选项允许您指定一个范围,以查看某个文件的特定行是谁贡献的。 -
git show
:git show
命令用于显示某个提交的详细信息,包括提交消息、更改的内容等。可以指定提交的哈希值或分支名称来查看。 -
git clean -n
:在运行git clean -f
之前,使用-n
选项来预览将要删除的文件,以确保不会意外删除重要文件。 -
git branch -vv
:使用-vv
选项,git branch
命令将显示每个分支与其关联的远程分支,以及它们之间的跟踪关系。 -
git rebase -i
:交互式 rebase (git rebase -i
) 允许您以交互方式重新排列、编辑和合并提交,非常有用于整理提交历史或合并相关提交。 -
git log --author
:使用--author
选项,您可以按作者的名字或电子邮件地址过滤提交历史,以查看特定作者的贡献。 -
git log --grep
:通过--grep
选项,您可以搜索提交消息中包含特定文本的提交,这有助于查找特定功能或问题修复。 -
git blame -L <start>,<end>
:git blame
命令的-L
选项允许您指定一个范围,以查看某个文件的特定行是谁贡献的。例如,git blame -L 10,20 file.txt
可以查看文件file.txt
中第 10 行到第 20 行的贡献者。 -
git log --graph --oneline --all --decorate
:结合多个选项,可以创建一个非常清晰的提交历史图,包括所有分支,提交消息,和标签信息。 -
git stash branch <new_branch_name>
:使用git stash branch
命令可以在创建新分支的同时将存储的更改应用到新分支上。这对于快速切换到新任务或修复分支并应用已存储的更改非常有用。 -
git worktree add <path> <branch>
:git worktree add
命令允许您在同一仓库中创建一个额外的工作目录,并关联它到指定的分支。这对于同时在多个分支上工作非常方便。 -
git log -- <file_path>
:使用git log -- <file_path>
命令可以查看与特定文件相关的提交历史,而不是整个仓库的提交历史。 -
git cherry-pick -x
:使用-x
选项,git cherry-pick
将在提交消息中包含原始提交的哈希值,以便您知道这个提交是从哪里来的。 -
git clean -i
:git clean
命令的交互式模式-i
允许您选择要删除的未受版本控制的文件和目录,而不需要记住每个文件的名称。 -
git diff HEAD~3..HEAD
:您可以使用git diff
命令来比较当前提交与前三次提交之间的更改。这是一个示例,您可以自定义范围来比较不同的提交。 -
git remote set-url
:使用git remote set-url
命令可以更改远程存储库的 URL,这对于将仓库迁移到新的 URL 或更新远程存储库的地址非常有用。 -
git grep --heading
:git grep
命令的--heading
选项会在每个匹配行之前显示文件名和提交 SHA,有助于在搜索结果中定位匹配。 -
git tag
和git describe
:git tag
用于创建和管理标签,而git describe
命令允许您获取最接近的标签及其距离,这对于版本控制非常有用。 -
git submodule
:git submodule
命令允许您将一个 Git 仓库嵌套到另一个 Git 仓库中,使您可以管理子模块的依赖关系。 -
git fsck
:git fsck
命令用于检查 Git 仓库的完整性,查找和修复损坏的对象或引用。 -
git notes
:git notes
允许您附加注释或元数据到提交对象上,这些注释可以包含额外的信息,但不会影响提交历史。 -
git rebase -x
:在交互式 rebase 期间,使用-x
选项可以让您在每个提交上运行自定义的命令,这对于执行自动化任务非常有用。 -
git pull --rebase
:git pull --rebase
命令将git pull
与git rebase
结合,从远程获取更改并将本地提交重新应用到最新提交之上。 -
git log --cherry-pick
:使用--cherry-pick
选项,git log
将只显示未在另一个分支上进行过git cherry-pick
的提交,这对于查找还未合并的提交非常有用。 -
git bundle
:git bundle
命令允许您将 Git 仓库的一部分打包成一个二进制文件,以便在没有网络连接的情况下共享代码。 -
git commit --fixup
和git commit --squash
:这些选项允许您在提交时为以前的提交创建修复或合并提交,以简化提交历史。 -
git clean -xdf
:使用-xdf
选项,git clean
将删除未受版本控制的文件和目录,包括忽略文件中定义的内容。