当前位置: 首页 > 工具软件 > Gity > 使用案例 >

Git 命令

呼延修然
2023-12-01

Git 常用命令

init : 初始化Git仓库

	git init  : 进入文件夹中把这个目录变成Git可以管理的仓库

git status:查看工作区状态
git diff HEAD --[file] : 查看工作区和版本库里面最新版本的区别
add : 添加文件到暂存区

	git add .   : 添加所有文件
	git add 【file】 :添加某个文件
	git add【file1】【file2】:添加多个文件

commit :提交暂存文件到本地仓库

	git commit -m “xxx” :带备注信息

git log :查看提交详细历史,可以确定要回退到哪个版本

	git log --pretty=oneline  :省略输出相关信息,查看当前分支最近的提交
	git log --pretty=oneline --addrev-commit : 省略部分commit id
	git log --graph : 查看分支合并图
	git log --graph  --pretty=oneline --abbrev-commit
	git reflog :查看历史命令列表

reset:

git reset --hard HEAD^ :回退到上一个版本,并撤回修改
git reset —hard [commit id(前7位)] : 跳到指定版本,之前或未来
git reset —soft [commit id] :撤销提交,不会撤销代码修改

fetch :

git  fetch : 将远程主机的最新内容拉到本地,用户在检查以后再决定是否合并到工作本机分支中
git pull :将远程主机的最新内容拉下来后直接合并:即:
	git pull  =   git  fetch     +      git   merge
git fetch <远程主机名>  :将某个远程主机的更新全部取回本地
				git fetch <远程主机名> <分支名>:只取回特定分支的更新
				eg:取回origin 主机的master 分支:git fetch origin master
				           取回更新后,会返回一个FETCH_HEAD,指的是某个branch在服务器上的最新状态,可以在本地通过它查看刚取回的更新信息:git log -p FETCH_HEAD,可以看到更新的文件名,更新的作者和时间,以及更新的代码,可以通过这些信息来判断是否产生冲突,以确定是否将更新merge 到当前分支

pull : 拉取远程仓库所有分支的更新并合并到本地

	git pull <远程仓库master>  <远程分支> :  <master的本地分支 >: 将远程仓库master 的分支的更新拉取到本地,与本地master 分支合并

push :推送本地仓库所有分支更新到远程仓库

	git push origin master : 将本地分支推送到远程主分支
	git push -u  origin master :将本地主分支推送到远程master分支,如没有则创建并初始化远程仓库,还会把本地的master分支和远程的master分支关联起来。  简化命令:git push
	git push origin <local_branch> #创建远程分支,origin是远程仓库名
	git push origin <local_branch>:<remote_branch> # 创建远程分支
	git push origin :<remote_branch> #先删除本地分支,然后删除远程分支

remote : 查看关联的远程仓库信息

	git remote add [远程仓库地址] : 添加新的远程仓库的地址/本地仓库关联远程仓库
	git  remote  : 显示全部关联的远程仓库的名称
	git remote   - v   : 显示全部关联的远程仓库的详细信息
	git remote rename  name1 name2 : 重命名
	git remote rm name  : 删除远程仓库的关联
	git remote  show  origin  :查看指定关联的远程仓库的全部信息

branch:

git branch  branch_name:创建分支
git branch:查看本地所有分支
git branch   -r :查看远程所有分支
git branch  -a:查看本地和远程的所有分支
git branch -v:查看最新提交的信息
git branch_name:查看具体分支
git branch  -d  branch_name:删除本地分支
git branch  -d  -r branch_name     git push origin:<branchname>:删除远程分支,删除后还需推送至服务器
git branch -D <name>:强制删除未合并分支
git branch -m <oldbranch> <newbranch>:重命名本地分支

checkout : 切换分支

	git checkout  branch_name : 切换到具体分支
	创建并切换:git  checkout  -b  branch_name :相当于以下两条命令:
					git branch [分支名]         git checkout [分支名]
	git checkout --[file] : 把文件在工作区的修改全部撤销
rm [file]  :文件管理区中把没有用的文件删除
git rm [file] :从版本库中删除文件
git checkout -- [file] :如果删除错了,因为版本库里还有,所有可以把误删除的文件恢复到最新版本

rebase :调整commit信息,包括合并commit信息到master以及删除commit信息或者修改log信息等。当合并的时候,它是线性合并;使用交互模式编辑commit的信息。

**合并commit信息到master**
例如有如下commit信息并且当前处于topic分支:

      A---B---C topic
     /
D---E---F---G master

当我们执行:git rebase master 命令后,commit信息将会变为:

              A'--B'--C' topic
             /
D---E---F---G master

如果我们执行:git rebase topic master,则commit信息会变为:

      A'--B'--C' topic
     / 
D---E---A'---B'---C'---F---G master

上面两种情况相当于把commit信息合并到一起,而且是线性合并,这就是与merge不同的地方,如果使用git merge进行合并,则结果为:

      A---B---C      topic
     /          \
D---E---F---G ---H  master

多数情况下,当执行git rebase时,会出现conflict,此时,我们需要手动处理冲突,然后执行git add 把修改后的文件添加到暂存区,最后,如果想完成rebase,则执行git rebase –continue,如果不想,则执行git rebase –abort

**使用交互模式编辑commit信息**
使用git rebase -i 交互模式,你可以编辑commit信息,包括改变commit的顺序、删除某些commit、修改log信息等。使用方法为:git rebase -i ,例如:
执行git rebase -i HEAD~4,编辑器将会自动打开,显示最新的4个commit信息,以及一些操作命令,效果如下:

		pick 9a54fd4 添加commit的说明
		pick 0d4a808 添加pull的说明
		pick d286baa The oneline of this commit
		pick f1a5c00 The oneline of the next commit
		
		# Rebase 326fc9f..0d4a808 onto d286baa
		#
		# Commands:
		#  p, pick = use commit
		#  r, reword = use commit, but edit the commit message
		#  e, edit = use commit, but stop for amending
		#  s, squash = use commit, but meld into previous commit
		#  f, fixup = like "squash", but discard this commit's log message
		#  x, exec = run command (the rest of the line) using shell
		#
		# If you remove a line here THAT COMMIT WILL BE LOST.
		# However, if you remove everything, the rebase will be aborted.

这些命令都很容易理解,比如你想修改0d4a808 commit的log信息,则把第二行的pick改为reword即可,然后保存退出,此时会再次打开一个编辑器,让你修改0d4a808 commit的log信息,修改后保存即可。

如果你想在0d4a808 和 d286baa 两个commit之间补上一个新的commit,可以使用edit替换第二行的pick然后保存,按照提示用git commit –amend添加一个新的commit,然后执行git rebase –continue即可。

如果你想删除9a54fd4和d286baa,则直接删了9a54fd4,并且把d286baa前面的命令改为fixup,意思就是删除本条commit。注意,不能直接把d286baa的记录删除,因为只有在前面没有commit的情况下才可以直接删除,效果如下:

		(这里删除了   pick 9a54fd4 添加commit的说明)
		pick 0d4a808 添加pull的说明
		fixup d286baa The oneline of this commit
		pick f1a5c00 The oneline of the next commit

原文链接:https://blog.csdn.net/fangjian1204/article/details/51017266

merge : 合并分支
git merge branch_name : 把分支的工作成果合并到master 分支上

cherry-pick :将其他分支上的commit 修改,移植到当前的分支:比如想在某个稳定版本上,添加一个刚开发完成的版本中的功能。就可以使用该命令,将这个功能相关的commit提取出来,合入稳定版本的分支上。
git cherry-pick <commit-id>  : 可以通过git管理工具或者git log 命令查找需要的commit-id。当执行完后,会自动生成一个新的commit 进行提交,会有一个新的commit ID。
git cherry-pick -x <commit-id> :保留原提交的作者信息进行提交。
git cherry-pick <start-commit-id>…<end-commit-id> :支持批量的cherry-pick,可以一次将一个连续的时间序列内的commit,(左开,右闭]的区间。如果想要包含start-commit-id,用^ 标记一下,就变成[左闭,右闭]的区间:git cherry-pick <start-commit-id>^…<end-commit-id>

注意 git 命令中,对于 commit-id 的操作,都只需要使用前五位就可以了。
git cherry-pick 371c2…971209 // (2,5]
git cherry-pick 371c2^…971209 // [2,5]

git clone [github仓库地址:如远程仓库HTTPS/SSH地址]:从远程仓库克隆到本地普通文件夹中

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "your note" [branch name]

假设Git目前只有一个分支master。开发人员的工作流程是

  • git clone master branch

  • 在自己本地checkout -b local创建一个本地开发分支

  • 在本地的开发分支上开发和测试

  • 阶段性开发完成后(包含功能代码和单元测试),可以准备提交代码

    • 首先切换到master分支,git pull拉取最新的分支状态
    • 然后切回local分支
    • 通过git rebase -i 将本地的多次提交合并为一个,以简化提交历史。本地有多个提交时,如果不进行这一步,在git rebase master时会多次解决冲突(最坏情况下,每一个提交都会相应解决一个冲突)
    • git rebase master将master最新的分支同步到本地,这个过程可能需要手动解决冲突(如果进行了上一步的话,只用解决一次冲突)
    • 然后切换到master分支,git merge将本地的local分支内容合并到master分支
    • git push将master分支的提交上传
  • 本地开发分支可以灵活管理

git checkout master
git pull
git checkout local
git rebase -i HEAD~2  //合并提交 --- 2表示合并两个
git rebase master---->解决冲突--->git rebase --continue
git checkout master
git merge local
git push

原文链接:https://blog.csdn.net/nrsc272420199/article/details/85555911

 类似资料: