常用的git命令

我实践过的常用git命令

工作中使用git进行代码协作,碰到不会的命令都是通过google找到帮助,渐渐总结了几个常用场景下的git命令。

基础

查看远程仓库地址

$ git remote -v

文件忽略

忽略python编译文件

忽略python编译产生的.pyc、.pyo以及dist等文件和目录,可以在工程根目录下增加.gitignore文件,添加如下内容:

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

本地和远端的配置文件

服务运行的配置项一般都放在.conf、.properties和.json等文件中,例如application.properties、database.conf。在每个人本地开发调试过程中都需要修改成自己测试环境的信息,这些文件的修改不应该提交到远端,每次提交又需要过滤掉,十分麻烦。
可以参考一些开源项目的最佳实践,在远端提交模板文件,例如application.properties.template,模板中的配置项通过占位符表示,工程部署阶段将文件改名并替换占位符为生产环境信息。在本地调测时,将.template后缀去掉,设置为本地调测环境信息。然后在.gitignore中忽略本地配置文件。
这样麻烦就解决啦!

文件管理

删除文件

$ git rm src/abc.py

删除目录

$ git rm -rf src/abc/123

删除空目录

目录删除只会删除目录下的文件,本地空目录仍然存在,命令如下:

$ git clean -fd

git rm文件恢复

有一次想放弃本地的修改用远端文件重新覆盖,手贱,git rm了某个文件,结果发现git pull时这个文件不再被同步了。。。git status还发现这个文件删除操作会被commit

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    abc.py
#

恢复办法:

$ git reset HEAD abc.py
Unstaged changes after reset:
M   abc.py
$ git checkout -- abc.py

果然abc.py被找回来了!

合入记录

合并两次提交记录

有时提交后发现不够完善需要追加修改,但是仍希望历史记录中仅出现一次修改,使特性追溯更容易,这时候需要将最近两次commit合并为一次。

$ git rebase –i HEAD~2

会出现类似如下的内容,将第二行的pick改成squash,然后:x保存修改退出。

pick b82dd28e i have commit abc file
pick 0e0141c1 i have commit 123 file

这时候git会自动将第二条修改合并到第一条修改中去,并提示输入新的comments,git同时显示出两次的合入记录,需要你重新编辑。然后输入git log就可以看到两条commit已合并成一条。
提交到远端,运行git push --force origin abc_branch 即可

最近的合入详情

$ git log -p -2

-p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新

查看单个文件的合入记录

git log --pretty=oneline abc.xml

查看某次合入详情

$ git show {commit-id}

修改上一条commit的message

如果上一条commit已经push了,可以参考上文的“合并两次提交记录”;
如果上一条commit暂未push到远端,可以执行:

$ git commit --amend

git bash会打开上一次的commit记录,然后你只需要在原来的message中增加新的内容即可。git log中也只会显示一条commit。

显示修改的文件列表

$ git log --name-only 

显示修改的文件列表和状态

$ git log --name-status

撤回已经push的commit

第一步:找到项目的commits信息

$ git reflog
0fecd04fb (HEAD -> master) HEAD@{0}: commit (merge): Merge remote-tracking branch 'origin/feature_2020' into master
0d475e42e HEAD@{1}: checkout: moving from dev_1.0 to master
6ef360453 (origin/dev_1.0, origin/HEAD, dev_1.0) HEAD@{2}: clone: from ssh://git@example.com/example.git

前面的一串字符就是commit的版本号。

第二步:本地回退commit

$ git reset --hard HEAD~1
HEAD is now at 0d475e42e Merge branch 'master_dev' into 'master'

reset命令分为–hard和–soft。–soft只是改变了HEAD的指向,本地代码不会变化,通过git status可以看到修改状态,也可以通过git commit继续提交。–hard在改变HEAD指向的同时也会回退本地源码。

第三步:覆盖远端分支

$ git push origin master --force

参考:https://blog.csdn.net/guozhaohui628/article/details/78922946

冲突处理

git pull冲突(保留本地修改)

如果远端代码已更新,而你本地也修改了同一个文件的同一个地方,git pull时会提示冲突:

error: Your local changes to 'python/src/123.py' would be overwritten by merge.  Aborting.
Please, commit your changes or stash them before you can merge.

可以先将本地文件暂时保管起来,然后重新同步,最后解决冲突,提交。

$ git stash
$ git pull
$ git stash pop stash@{0}

系统会自动合并修改的内容,但如果有冲突,需要手工订正。
打开冲突文件,能搜到如下类似内容:

<<<<<<< Updated upstream
    if a == 2:
=======
    if a == 3:
>>>>>>> Stashed changes

其中Updated upstream 和=======之间的内容就是pull下来的内容,=======和Stashed changes之间的内容就是本地修改的内容。
解决冲突后重新提交就可以了。

git pull冲突(放弃本地修改)

$ git restore <file>

个人分支与特性分支冲突

从特性分支拉取个人分支,开发一段时间后,如果远端特性分支有其他开发人员的合入,在提交MR将个人分支合并到特性分支前,需要处理冲突。

$ git merge origin/[branch-name]

分支管理

查看一个分支从哪个分支拉出来的

$ git reflog --date=local | grep <branchname>
30d907e8f HEAD@{Mon May 6 16:18:00 2019}: checkout: moving from dev_1.0.0 to dev_2.0.0

删除本地分支

$ git branch -d 分支名

拉取分支

  1. 切换到源分支
$ git checkout master
$ git pull
  1. 从当前分支拉取本地特性开发分支
$ git checkout -b dev
  1. 本地开发分支同步到线上
$ git push origin dev

代码库切换

如果远端代码库切换,需要把本地库关联到远端库

$ git remote set-url origin [url]
$ git branch --set-upstream-to=origin/<branch> local_branch

本地项目关联到远程仓库

  1. 首先在项目目录下初始化本地仓库
$ git init
  1. 添加所有文件( . 表示所有)
$ git add .
  1. 提交所有文件到本地仓库
$ git commit -m "备注信息"
  1. 连接到远程仓库
$ git remote add origin 你的远程仓库地址

5.将项目推送到远程仓库

$ git push -u origin master
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值