Git常用命令

本文详细介绍了Git的使用方法,包括配置、文件管理、分支、合并、冲突解决及远程仓库交互等核心概念,旨在帮助开发者高效掌握版本控制技巧。

分布式版本控制系统

配置文件:

/etc/gitconfig 系统对所有用户普遍适用的配置

~/.gitconfig 用户目录下的配置文件只适用于该用户

 

工作目录下不外乎两种状态:以跟踪或未跟踪。

 

Changes to be committed 在这行下面,就说明是以暂存状态,如果此时提交,那么该文件此时此刻的版本就被留存在历史记录中。(git add file(new file, modified file:暂存)


on branch master 说明目前分支

 

1 git pull origin index2.0

从服务器上拉取最新代码

 

2.git checkout

检查更新

 

3.git stash 

消除modified文件

 

4.git statsh pop

恢复modified文件

 

5.查看本地log文件

git log

 

6.查看远程git文件(图形化)

gitk

 

7.配置信息
git config --global user.name “Pan kai”

git config --global user.email “kaipan@tagalong.cc”

 

8.设置默认使用的文本编辑器(系统默认使用vim)、分页器
git config --global core.editor vim

git config --global core.pager ‘’

 

9.配置参数
git config --list 重复的参数说明来自不同的配置文件,但git实际采用~/.gitconfig配置文件

 

10.从现有仓库克隆

git clone url(git支持许多传输协议)

例如:git clone git://github.com/schacon/grit.git

自定义项目名称:

git clone git://github.com/schacon/grit.git mygrit

 

11.忽略某些文件 
总会有文件无需纳入git的管理,也不希望它们总出现在未跟踪文件列表,通常都是些自动生成的文件,像是日志或者编译过程中创建的等等。
vim .gitignore 

 

12.当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容
git diff
暂存区域和上次提交时的快照之间的差异
git diff --cached(git diff --staged)

 

13.提交更新

git commit

git commit -m ‘注释信息’

 

14.跳过暂存区域
git commit -a(跳过git add,被跟踪的文件)

15.从暂存区域移除文件(连同从工作目录删除)
git rm file

 

16.从暂存区域移除不被跟踪的文件
git rm --cached file

 

17.移动文件

git mv file_from file_to
重命名,git mv README.txt README 等同于:
mv README.txt README

git rm REAME.txt

git add README

 

18.查看提交历史
git log(按时间列出所有的更新)

git log -p(展开显示每次提交的内容差异)

git log -2(仅现实最近的两次更新)

git log -p -2

 

19.列出修改过的文件,以及其中添加和移除的行数,并在最后列出所有增减行小计(+++++++++------)
git log --stat

20.将每个提交放在一行展示, 格式输出、简单图形、时间、作者
git log --pretty=oneline

git log --pretty=format:”%h - %an, $ar : %s”

git log --pretty=format:”%h - %an, $ar : %s --graph

git log --pretty=format:”%h - %an, $ar : %s --graph   --author =gitster --since=”2008-10-01”--before=”2008-11-01”

 

21.使用图形化工具查阅提交历史

gitk

 

22.修改最后一次提交

git commit --amend
例如:

git commit -m ‘initial commit’

git add forgotten_file

git commit --amend

上面的三条命令最终将得到一个提交,第二个提交命令修正了第一个的提交内容

 

23.取消已经暂存的文件

git reset HEAD file

 

24.取消对文件的修改
git checkout -- file

 

25.查看当前的远程库

git remote
加上 -v选项,显示对应的克隆地址:

例如 git remote -v:
origin http://Pankai:12345678a@192.168.1.133/git/tagalong-web.git(fetch)

origin http://Pankai:12345678a@192.168.1.133/git/tagalong-web.git(push)

 

26.从远程仓库抓取数据

git fetch remote-name(会抓取上次克隆以来别人上传到远程仓库中的所有更新(或是上次fetch以来别人提交的更新)),不合并分支,

所以一般运行git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中当前分支。

27.推送数据到远程仓库

git push [remote-name] [branch-name]

28.查看远程仓库信息

git remote show [remote-name]

 

29.新建标签

轻量级:不会变化的分支,实际上它就是个指向特定提交对象的引用。

含附注:实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也容许使用GUN Privacy Guard(GPG)来签署或验证。

git tag(查看标签)

新建含附注:git tag -a v1.4 -m ‘my version 1.4’(用 -a,-m 注释)

查看标签信息:git show v1.4

签署标签:如果你有自己的私钥,还可以用GPG来签署标签,只需把之前的-a改为-s

查看标签信息:git show v1.5

验证标签:git tag -v [tag-name]

 

30.后期加注标签

git log --pretty=oneline

git tag -a v1.2 9fceb02(提交对象的校验和(或前几位字符))

 

31.分享标签

git push origin [tagname]

 

32.自动完成

git command<tab><tab>

例如:

git co<tab><tab>

commit config

 

33.Git命令别名

例如:

git config --global alias.ci commit(ci代替commit提交)

 

34.创建分支

git checkout -b hotfix

相当于:

git branch hotfix(创建分支)

git checkout hotfix(切换分支)

35.合并分支

git checkout master

git merge hotfix(同一分支线)

git merge iss5(不同分支,共同祖先)(找到祖先节点合并到这一节点)

36.删除分支

git branch -d hotfix

 

37.冲突合并

<<<<<<< HEAD:index.html

code1

========

code2 

>>>>>> iss53:index.html
HEAD master分支,在运行merge命令时检出的分支中的内容,下半部分是在iss53分支中的内容,二者的办法是选其一亲自整合到一起。

解决完之后使用git commit合并提交

 

38.查看已合并分支

git branch --merged

结果:

iss53

master

 

39.查看还未合并的分支

git branch --mo-merged
没有*号的分支通常都可以用git branch -d iss53删掉

 

40.长期分支

 

 

 

41.远程分支

git remote add url(例如:git://git.team1.ourcompany.com)

git checkout -b [分支名] [远程名]/[分支名]:新建分支同远程分支一致。

 

42.推送本地的某一个分支,把它推送到一个你具有写权限的远程仓库

git push origin serverfix(取出我的serverfix本地分支,推送它来更新远程仓库的的serverfix分支)

等价于:git push origin serverfix:serverfix。

git fetch origin命令之后,你仍然无法在本地编辑该远程仓库,换句话说,你不会有一个新的serverfix分支,有的只是一个你无法移动的origin/serverfix指针。如果要把内容合并到当前分支,可以运行origin/serverfix,如果想要一份自己的serverfix来开发,可以在远程分支的基础上分化出一个新的分支来:

git checkout -b serverfix origin/serverfix(这会得到一个serverfix本地分支,其内容同远程分支origin/serverfix一致)

 

43.跟踪分支

跟踪分支是一种和远程分支有直接联系的本地分支,在克隆仓库时,git会自动创建一个master分支来跟踪origin/master,这正是git pull 和 git push一开始就能正常工作的原因。

git checkout -b [分支名] [远程名]/[分支名]

 

44.衍合

 

 

通过在C3产生的变化补丁重新在C4的基础上打一遍。
git checkout experiment
git rebase master
原理:回到两个分支(你所在的分支和你想要衍合进去的分支)的共同祖先,提取你所在分支每次提交时产生的差异(diff),把这些差异分别保存到临时文件里,然后从当前分支转换到你需要衍合入的分支,依序施用每一个差异文件。

现在可以回到master分支然后进行一次快速合并

体现:比方说,某些项目自己不是维护者,但想帮点忙,就应该尽可能使用衍合,先在一个分支里进行开发,当准备向主项目提交补丁的时候,再把它衍合到origin/master里面。这样维护者就不需要做任何整合工作,只需根据你提供的仓库地址作一次快进,或者采纳你提交的更改。

45.更多有趣的衍合

git rebase --onto master server client

等于说“检出client分支,找出client分支和server分支的共同祖先之后的变化,然后把它们在master上重演一遍”。

现在可以快进master分支:
git checkout master
git merge client
继续合并server 分支,可以直接把server分支衍合到master而不用手工转到server分支再衍合。
git rebase master server
git rebase [主分支] [特性分支]

快进主分支master:
git checkout master

git merge server

现在可以删除这两个分支:

git branch -d client

git branch -d server
 
永远不要衍合那些已经推送到公共仓库的更新(如果把衍合当作一种在推送之前清理提交历史的手段,而且仅仅衍合那些永远不会公开的commit,那就不会有任何问题)。 

46.指定文件不在git管理的范围内(取消跟踪的文件)
git update-index --assume-unchanged filename

47.git协议
git可以使用四种重要的协议来传输数据:本地传输、SSH协议、HTTP协议和GIT协议,除了HTTP协议之外,其他所有协议都必须在服务器上安装并运行git

48.版本库又称仓库
版本库或者仓库,英文名Repository,就是一个目录,这个目录的文件都被git管理,不管你做什么操作都会被记录,包括:增加、删除、修改、文件等,都会被记录下来,以便后来跟踪与修改相关记录,甚至被还原。
1.新建目录
2.初始化仓库 git init 新建目录路径

49.回滚
git reset HEAD^ :回滚到上第一个版本
git reset HEAD^^: 回滚到上第二个版本
git reset HEAD~n:回滚到上第n个版本

50.返回最新版本

git reflog 查看记录
git reset HEAD@{n}: 前进到最新的第n个版本

51.协议
SSH协议:同时便于读或者写的协议,也是一个验证授权的网络协议;而因为其普遍性,通常也很容易假设和使用
缺点:人们必须是能访问主机的情况,访问仓库

几个人在不公开的项目合作,仅仅一个SSH服务器和纯仓库就足够了
只读协议:Git和HTTP/S协议

52.纯仓库
git clone --bare 现有仓库名 纯仓库名.git

53.为现有仓库添加一个远程仓库
1.cd 现有仓库
2.git remote add origin 纯仓库名.git(路径,纯仓库远程路径) 

54.生成SSH公钥
ssh-keygen

55.查看没有合并的日志
git log --no-merges

56.推送本地分支
git push origin(远程仓库) local_branch:server_branch
git push url local_branch

 

57.查看某一次提交历史

git show SHA1

git show HEAD^^^ => git show HEAD~3

58.查看某一条分支
git log master..Develop(查看在Develop而不在master的提交日志)

git log --left-right master..Develop

git log Develop..master(查看在master而不在Develop的提交日志)

60.查看本地需要提交到远程库的提交
git log origin/master..HEAD

 

61.查看在分支refB而不在refA的内容

git log refA..refB

git log ^refA refB

git log refB --not refA

 

62.查看在refA或refB而不再refC的内容

git log refA refB ^refC

git log refA refB --not refC

 

63.交互式的SHELL模式

git add -i

git add --interactive

左侧带*号表示文件将被暂存,在update后面直接加入回车会把所有选中的内容暂存。

 

65.存储工作
git stash
git stash(存储列表)
git stash apply(应用最近一次的存储)

git stash apply stash@{n}(应用某一次的存储)

git stash apply --index(应用最近一次已被暂存的存储)
git stash drop stash@{n}(移除存储)
git stash pop(重新应用存储)

 

66.修改多个提交说明、重排提交(删除提交)

67.

68.核弹级选项 filter-branch

在所有提交中删除一个文件

git filter-branch --tree-filter rm -f file HEAD
在所有分支下执行
git filter-branch --index --tree-filter rm -f fileHEAD

69.全局性地更换新地址
git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_EMAIL" = "schacon@localhost" ]; then GIT_AUTHOR_NAME="Scott Chacon"; GIT_AUTHOR_EMAIL="schacon@example.com"; git commit-tree "$@"; else git commit-tree "$@"; fi' HEAD

 

70.创建签署的含附注的标签
git config --global user.signinkey <gpg-key-id>

71.git对象(git是一套内容寻址文件系统)
git init( 创建存储和操作目录 )
git初始化objects目录之后,同时在该目录下创建了pack和info子目录
echo test content | git hash-object -w --stdin(参数-w表示hash-object命令存储(数据对象),若不指定这个参数改名该命令仅仅返回键值。--stdin指定从标准输入设备(stdin)来去读内容,若不指定这个参数则需要指定一个要存储的文件的路径
git cat-file -p SHA-1校验和

72.tree对象
所有内容以tree或blob对象存储,其中tree对象对应于UNIX中的目录,blob对象则大致答应与inodes或文件内容
git cat-file -p master^{tree}

73.创建tree对象
人为添加一个文件到暂存区域中
 git update-index --add --cacheinfo 100644 \ 83baae61804e65cc73a7201a7252750c76066a30 test.txt
文件模式100644表明这是一个普通文件,100755表示是一个可执行文件,120000表示符号链接
将暂存区域内容写入一个tree对象。无需-w参数,如果目标tree不存在,调用write-tree会自动根据index状态创建一个tree对象。
git write-tree
命令:

git write-tree d8329fc1cc938780ffdd9f94e0d364e0ea74f579

Git cat-file -p d8329fc1cc938780ffdd9f94e0d364e0ea74f579 100644 blob 83baae61804e65cc73a7201a7252750c76066a30 test.txt



74.HEAD标记
HEAD文件就是一个指向你当前所在分支的引用标识符。这样的引用标识符,并不包含SHA-1值,而是一个指向另外一个引用的指针。
cat .git/HEAD
ref: refs/heads/master
当执行git commit命令,它就创建了一个commit对象,把这个commit对象的父级设置为HEAD指向的引用的SHA-1值
手动更新
git symbolic-ref HEAD
git symbolic-ref HEAD refs/heads/Pankai

75.数据恢复


这样就丢弃了最新的两个commit -- 包含这两个commit的分支不存在了,可以使用git reflog工具
git reflog

git branch recover-branch ab1afef
这样就有一个跟原来一样的recover-branch分支,最新的两个commit又找回来了

76.直接恢复文件到某个版本
git ref SHA-1 file_path

转载于:https://my.oschina.net/kaipan/blog/310627

<think>我们被要求生成一个关于Git常用命令的汇总列表。根据用户的要求,我们需要提供结构清晰的回答,并尽量保证真实可靠。同时,我们参考了站内引用中提供的Git命令信息。根据引用内容,我们可以整理出以下常用命令:1.基本操作(初始化、添加、提交等)2.分支管理3.远程仓库操作4.标签管理5.历史查看与撤销6.其他实用命令(如删除大文件、清理仓库等)我们将按照这些类别来组织命令。注意:由于引用中提供了一些特定问题的解决方案(如删除大文件),我们也会将其作为实用命令的一部分。另外,注意用户要求使用中文回答,并且行内数学表达式使用$...$格式(但本问题不涉及数学表达式,所以忽略),独立公式使用$$...$$格式(同样不涉及)。同时,在回答末尾生成相关问题。我们开始整理Git常用命令汇总:</think>### Git常用命令汇总 以下是Git常用命令分类整理,帮助您高效管理代码版本: #### 1. 仓库初始化与基础操作 ```bash # 初始化新仓库 $ git init # 克隆远程仓库 $ git clone <远程仓库URL> # 查看当前状态 $ git status # 添加文件到暂存区 $ git add <文件名> # 添加单个文件 $ git add . # 添加所有修改 # 提交更改 $ git commit -m "提交说明" ``` #### 2. 分支管理 ```bash # 创建分支 $ git branch <新分支名> # 切换分支 $ git checkout <分支名> $ git switch <分支名> # Git 2.23+推荐方式 # 创建并切换分支 $ git checkout -b <新分支名> $ git switch -c <新分支名> # 合并分支 $ git merge <要合并的分支名> # 删除分支 $ git branch -d <分支名> # 安全删除 $ git branch -D <分支名> # 强制删除未合并分支 ``` #### 3. 远程仓库操作 ```bash # 添加远程仓库 $ git remote add origin <远程仓库URL> # 查看远程仓库 $ git remote -v # 推送到远程仓库 $ git push -u origin <分支名> # 首次推送 $ git push # 后续推送 # 拉取远程更新 $ git pull origin <分支名> $ git pull --rebase origin <分支名> # 变基式拉取 # 删除远程连接 $ git remote rm origin ``` #### 4. 版本回退与撤销 ```bash # 查看提交历史 $ git log $ git log --oneline # 简洁版日志 # 撤销工作区修改 $ git checkout -- <文件名> # 撤销暂存区文件 $ git reset HEAD <文件名> # 版本回退 $ git reset --hard <commit_id> # 彻底回退 $ git reset --soft <commit_id> # 保留修改 # 恢复删除的文件 $ git restore <文件名> # Git 2.23+ ``` #### 5. 标签管理 ```bash # 查看标签 $ git tag # 创建标签 $ git tag <标签名> # 轻量标签 $ git tag -a v1.0 -m "版本说明" # 附注标签 # 推送标签 $ git push origin <标签名> # 删除标签 $ git tag -d <标签名> # 本地删除 $ git push origin :refs/tags/<标签名> # 远程删除 ``` #### 6. 高级维护 ```bash # 清理历史大文件 $ git filter-branch --force --index-filter \ 'git rm -rf --cached --ignore-unmatch <文件名>' \ --prune-empty --tag-name-filter cat -- --all # 回收存储空间 $ git reflog expire --expire=now --all $ git gc --prune=now # 查看仓库大小 $ git count-objects -vH ``` #### 7. 配置相关 ```bash # 设置用户名/邮箱 $ git config --global user.name "用户名" $ git config --global user.email "邮箱" # 查看配置 $ git config --list # 设置默认编辑器 $ git config --global core.editor vim ``` > **最佳实践提示**: > 1. 频繁提交小变更,保持提交记录清晰 > 2. 使用`.gitignore`文件排除无需版本控制的文件 > 3. 重要分支(如main/prod)设置保护规则 > 4. 推送前先执行`git pull --rebase`避免合并提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值