前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git工作中的使用

Git工作中的使用

作者头像
matt
发布2022-10-25 15:58:07
3160
发布2022-10-25 15:58:07
举报
文章被收录于专栏:CSDN迁移

Git使用

视频教材

参考教材

更详细的命令篇可以查看我的另一篇博客

一、安装git

git是一个命令行工具,当前的最新版本是Git-1.9.5-preview20141217.exe。安装过程很简单,一路默认next既可。

二、配置git及生成公钥

git-bash中进行如下操作:

代码语言:javascript
复制
# 编辑用户名、邮箱
git config --global user.name "yourname" 
git config --global user.email "youremail@xxx.com"
# 查看当前的用户名、邮箱
git config user.name
git config user.email

git config -l

# 生成SSH Key,SSH Key文件保存地址默认既可。直接回车可以跳过设置密码
ssh-keygen -t rsa -C "your_email@xxx.com"

出现如下提示,表示创建SSH Key成功。其中,id_rsa是私钥文件,请妥善保管;id_rsa.pub是公钥,归档处需要设置。

三、归档处导入公钥

在归档处的SSH页面,导入之前生成的公钥id_rsa.pub里的内容,建立信任。

若安装git图形界面(如TortoiseGit-2.4.0.2-64bit),在network中设置SSH Client为git安装目录的/usr/bin/ssh.exe,diff viwer也可以修改为常用的查看文件差异的软件(如Beyond Compared)。

四、项目中常用操作

参考文档

  • 图形界面操作: 在"git clone"弹出窗口,输入仓库地址,如果使用的是SSH方式clone,那么在"load putty key"中需要指定之前生成的putty私钥。
  • 基本概念: 工作拷贝(工作目录):用于存放产品开发数据本地工作目录。 索引(Index):用于存放待提交数据的缓存区。 本地库:远端库的一个完整的拷贝,包括所有文件的修改记录,分支等。 远端库:本地库clone来源。 中心库:远端库的一种,公司级存放某个项目所有产品数据的仓库。 快照(snapshot):版本库某个时间点所有文件集合。 全球版本号(commitID):Git库的版本号是通过SHA-1算法根据库中的所有内容计算出一个40位的哈希值,这个哈希值是全球唯一的,基本只要前六位就可以唯一标识了。

4.1 准备操作

代码语言:javascript
复制
# --克隆git仓库
git clone ${url.git}
git clone -b ${branch-name} ${url.git}
git init
git config --global user.name "${username}"
git config --global user.email "${useremail}"
git config --global color.ui true

# --删除 untracked 的文件
# 删除 untracked files
git clean -f
# 连 untracked 的目录也一起删掉
git clean -fd
# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
# 在用上述 git clean 前,强烈建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删,该语法不执行 clean 操作
git clean -nxfd
git clean -nf
git clean -nfd

# --创建分支
git branch ${branch-name}
# master是当前分支:
git checkout -b ${branch-name}
# master不是当前分支:
git checkout -b ${branch-name}master
# 修改分支名
git branch -m ${old-branch} ${new-branch}

# --删除分支
# 删除fork上的分支,以及本地对应的remote/${branch-name}分支
git push origin :${branch-name}
# 删除本地的分支
git branch -d ${branch-name}

4.2 修改提交代码

代码语言:javascript
复制
# --查看当前修改状态,-s表示以缩写的形式查看
git status

# --添加文件
# 添加一个指定文件
git add ${file-name}
# 添加全部修改的文件,无删除文件
git add .               
# 添加全部修改的文件,有删除文件  
git add --all             
# 添加已忽略文件
git add -f ${file/path}   

# --提交文件
# 指定提交信息并提交,-am可以合并add
git commit -m ""
# 弹出vim,在其中添加提交信息
git commit
# 覆盖最新一次的提交
git commit --amend

# --将已经提交到暂存区的某个文件取消提交操作
git reset ${file-name}

# 重命名或者移动本地文件或目录,需commit
git mv ${old-file-name} ${new-file-name}

merge参考资料

4.3 解决冲突

代码语言:javascript
复制
# 使用 git stash save "test-cmd-stash" 添加说明
$ git stash
$ git pull
# 使用 git stash apply 拉回 stash,并且不删除 stash 信息,pop 会删除
$ git stash pop stash@{0}
# CONFLICT (content): Merge conflict in xxx.xxx
# 解决文件中的冲突即可

4.4 remote仓库配置

代码语言:javascript
复制
# --远程仓库配置
git remote add origin ${remote-website.git}      
git branch --set-upstream-to=origin/dev dev    # 将远程分支dev和本地分支dev关联
git remote rm origin	# 删除名为origin的远程仓库

# --提交/拉取
git pull origin master
git push origin dev:master
# pull操作相当于
git fetch origin master
git merge ${FETCH_HEAD}    # 合并到当前所在的分支中
# 根据返回的FETCH_HEAD,查看刚取回的更新信息
git log -p {FETCH_HEAD}

# --remote仓库
# 显示所有的remote仓库
git remote show          
# 查看某一个remote仓库信息  
git remote show origin     

建议使用git-stash命令将这些未commit文件暂存起来,并在解决冲突以后使用git stash pop把这些未commit文件还原出来。

4.5 回退

reset**的参数:**

–mixed

意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作

这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

–soft

不删除工作空间改动代码,撤销commit,不撤销git add .

–hard

删除工作空间改动代码,撤销commit,撤销git add 。注意完成这个操作后,就恢复到了上一次的commit状态。

代码语言:javascript
复制
# 回退到修改前的版本 / 回退到add之后,新修改之前
git checkout -- ${file}
# 回退到add之前的版本,但不修改内容,需要有提交版本
git reset HEAD ${file}
# 回退到指定的commit版本
git log
git reset --hard ${commit-id}

# 使用:进行修改并add,然后修改最近一次提交说明,会将git链指向新的提交,但是前一次的提交仍存在(需要记得commit id)
# 只修改最近一次提交说明,会打开一个vim,在这之前也可以添加删除
git commit --amend        
# 修改多个历史提交,慎用
git rebase -i HEAD~${n} 

4.6 谨慎操作

代码语言:javascript
复制
# 清除本地未被跟踪的所有文件
git clean -f

五、后续归档处操作

5.1 issue

基于issue的开发,可以将issue理解为一个TODO List。issue提交之后,若被接受,需分配到相应的责任人,该issue依次进入coding、testing、verified、closed或者rejected状态。

5.2 Merger Request

提交一个MR,选择相应的项目和分支,需要注意二者之间的冲突。pull远程代码,修改merge conflict文件,保存提交并推送,线上重新发启MR即可。

变更issue状态(改为coding),并附上MR地址

5.3 同步远程私人仓库和远程主仓库

当主库(源项目)更新后,fork库并不会一起更新,需要自己手动去更新。

代码语言:javascript
复制
# 将远程主库site2同步到远程fork库的site1上
git clone ${git code site1}
git remote -v
git remote add ${remote repository name} ${git code site2}
git pull ${git code site2} master
git push ${git code site1} master

# 提交到远程仓库的某个分支
git pull ${remote repository name} ${remote branch name}:${local branch name}  
git push ${git code site1} ${local branch name}:${branch-name}
# 例如先将远程仓库config_base的release分支的代码拉取到本地dev分支,修改后再将dev分支的代码提交到bugfix分支
git pull config_base release:dev
git push config_base dev:bugfix

5.4 临时修改代码

代码语言:javascript
复制
git stash //暂存代码
git stash list //查看暂存区的所有暂存修改
git stash apply stash@{X} //取出相应的暂存,X为序号
git stash drop stash@{X} //将记录列表中取出的对应暂存记录删除

六、rebase

使用git pull命令的时候,可以使用–rebase参数,即git pull --rebase,这里表示把你的本地当前分支里的每个提交(commit)取消掉,并且把它们临时保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把本地当前分支更新为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上。

代码语言:javascript
复制
$ git pull --rebase <远程主机名> <远程分支名>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Git使用
  • 一、安装git
  • 二、配置git及生成公钥
  • 三、归档处导入公钥
  • 四、项目中常用操作
    • 4.1 准备操作
      • 4.2 修改提交代码
        • 4.3 解决冲突
          • 4.4 remote仓库配置
            • 4.5 回退
              • 4.6 谨慎操作
              • 五、后续归档处操作
                • 5.1 issue
                  • 5.2 Merger Request
                    • 5.3 同步远程私人仓库和远程主仓库
                      • 5.4 临时修改代码
                      • 六、rebase
                      相关产品与服务
                      命令行工具
                      腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档