git相关操作命令

配置 Git

#查看配置信息
git config --global --list

git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"

初始化Git 仓库

git init
git clone https://github.com/username/repository.git

git remote -v

#添加远程仓库地址ssh or http/https
git remote add gitName gitPath

基础工作流

#查看文件状态
git status

#将文件添加到暂存区
git add <filename>

#将全部文件添加到暂存区
git add .

#提交更改
git commit -m "Commit message"

#将本地更改推送到远程仓库
git push origin main

分支(Branch)管理

#查看所有分支
git branch

#创建新分支
git branch <branchname>

#新建分支
git checkout -b <new-branch-name>

#基于远程分支 新建本地分支
git checkout -b <new-branch-name> origin/<new-branch-name>

#切换分支
git checkout <branchname>

#合并分支
git merge <branchname>

#删除分支
git branch -d <branch-name>

#强制删除分支
git branch -D <branch-name>

#删除远程分支
git push origin --delete <branch-name>

更新与合并

#拉取远程分支,不merge
git fetch

#拉取远程分支 进行merge操作
git pull

#合并其他分支到你的当前分支
git merge <branchname>
git merge --continue
git merge --abort


#查看文件差异
git diff <source_branch> <target_branch>

Push

#推送分支到远程仓库
git push

#推送本地分支到远程仓库分支
git push branchName origin_branchName

#强制推送--force
git push -f origin branchName

#将本地分支push到远程remote仓库,多个仓库添加gitName区分,gitName指向gitPath
git push gitName --all

#本地和远程分支存在非fast-forward,基不一样
#允许远程分支历史版本合并,将本地和远程基合并,存在两个parent
git merge --allow-unrelated-histroys gitName/master 

分支Diff

#两个分支diff
git diff branch1 branch2 

#两个分支中某个文件diff
git diff branch1 branch2 -- fileName

#可以用commit_id 替换分支
git diff commit_id1 commit_id2 -- fileName

合并提交

#修改最近一次提交message
git commit --amend

#修改历史提交的commit message,此处commit id是需要修改提交信息的上一次提交
#弹出rebase 信息框,修改对应的commit id,将pick改为改为r或者reword,修改对应的message描述即可
git rebase -i 4adc51c

git merge 
#合并远程分支
git merge origin/branch 
#忽略本次merge
git merge --abort
#merge 后提交一次
git commit -am 'msg'

#基于master变基
git rebase master

#基于master变基 合并提交
git rebase master -i

#批量将pick 修改为squash
:%s/pick/squash/g

git rebase --continue
git rebase --abort

回滚更改

#撤销工作目录中所有未提交文件的修改
git checkout .

#将文件回滚到上一个提交的状态
git checkout <commit_hash> <filename>

#重置暂存区与工作目录,匹配最近一次的 commit
git reset --hard

#删除最近几次提交
git reset --hard 4adc51c

查看提交历史

#查看提交历史
git log

#查看特定文件的变更历史
git log -p <filename>

#查看简洁的提交历史
git log --pretty=oneline

#最近4次,一行展示,图形化展示
git log -n4 --oneline --graph

#查看提交类型
git cat-file -t 4adc51c

#查看提交的父提交
git cat-file -p 4adc51c

暂存区

Git 暂存区(Staging Area,也有时被称为“索引”)是 Git 版本控制系统的一个非常强大和独特的特性,它允许开发者在最终提交改动到仓库之前,对即将提交的文件和更改进行精细的审查和修改。

暂存区位于工作目录(你正在工作的文件夹)和仓库(项目的历史记录所在地)之间。

#暂存区和head diff
git diff --cached

#工作区和暂存区diff
git diff

#工作区和暂存区某个文件diff
git diff -- fileNme

#让暂存区恢复和head一致
git reset HEAD
git reset --hard HEAD

#让暂存区某个文件恢复和head一致
git reset HEAD -- fileName

#让工作区恢复和暂存区一致
git checkout -- fileName

stash

用于查看工作目录的状态,显示已修改、未跟踪等文件的信息。

该命令会列出已暂存和未暂存的变更,以及未被Git跟踪的文件。这可以帮助您了解当前工作目录中的变更情况

git status

#将当前工作目录中的临时变更(尚未提交)暂存起来,使其回到一个干净的工作目录状态,方便切换到其他分支或进行其他操作。
git stash

#查看已经暂存的内容列表
git stash list

git status

#可以将最近的暂存内容重新应用到工作目录中
git stash apply

#应用的同时删除该stash
git stash pop

rerere工具

#解决rebase 多次处理冲突的问题
git config --global rerere.enabled true

git merger master

#处理冲突
vim file

#提交工作区
git add file

git log

#本次操作会产生一次commit id
git commit -am 'temp'

git log

#回滚产生的temp commit id (HEAD~1 头指针的父指针)
git reset --hard HEAD~1
 

gitignore

doc: 这个规则表示忽略所有名为“doc”的文件或目录,无论其位于什么位置。

doc/: 这个规则表示忽略名为“doc”的目录,但不会忽略同名的文件。它只匹配“doc”这个目录,而不包括子目录。

/doc: 这个规则表示从根目录开始,忽略名为“doc”的目录或文件。它指定了路径是相对于根目录(工作树)的,而不是相对于当前.gitignore文件所在的目录。这将确保只有根目录下的“doc”会被忽略,而子目录中的“doc”不会被忽略。

更有趣的变基例子

Git - 变基

在对两个分支进行变基时,所生成的“重放”并不一定要在目标分支上应用,你也可以指定另外的一个分支进行应用。 就像 从一个主题分支里再分出一个主题分支的提交历史 中的例子那样。 你创建了一个主题分支 server,为服务端添加了一些功能,提交了 C3 和 C4。 然后从 C3 上创建了主题分支 client,为客户端添加了一些功能,提交了 C8 和 C9。 最后,你回到 server 分支,又提交了 C10。

Figure 39. 从一个主题分支里再分出一个主题分支的提交历史

假设你希望将 client 中的修改合并到主分支并发布,但暂时并不想合并 server 中的修改, 因为它们还需要经过更全面的测试。这时,你就可以使用 git rebase 命令的 --onto 选项, 选中在 client 分支里但不在 server 分支里的修改(即 C8 和 C9),将它们在 master 分支上重放:

$ git rebase --onto master server client

以上命令的意思是:“取出 client 分支,找出它从 server 分支分歧之后的补丁, 然后把这些补丁在 master 分支上重放一遍,让 client 看起来像直接基于 master 修改一样”。这理解起来有一点复杂,不过效果非常酷。

Figure 40. 截取主题分支上的另一个主题分支,然后变基到其他分支

现在可以快进合并 master 分支了。(如图 快进合并master分支,使之包含来自client分支的修改):

$ git checkout master
$ git merge client

Figure 41. 快进合并 master 分支,使之包含来自 client 分支的修改

接下来你决定将 server 分支中的修改也整合进来。 使用 git rebase <basebranch> <topicbranch> 命令可以直接将主题分支 (即本例中的 server)变基到目标分支(即 master)上。 这样做能省去你先切换到 server 分支,再对其执行变基命令的多个步骤。

$ git rebase master server

如图 将server中的修改变基到master上 所示,server 中的代码被“续”到了 master 后面

Figure 42. 将 server 中的修改变基到 master 上

然后就可以快进合并主分支 master 了:

$ git checkout master
$ git merge server

至此,client 和 server 分支中的修改都已经整合到主分支里了, 你可以删除这两个分支,最终提交历史会变成图 最终的提交历史 中的样子

$ git branch -d client
$ git branch -d server

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值