项目中使用 Git 高频场景
1. 拉取最新主干代碼,進(jìn)行功能迭代或 bug 修復(fù)
- 首先切換到主干:
git checkout master
- 然后拉取最新代碼:
git pull
- 基于 master 創(chuàng)建本地分支 xxx:
git checkout -b feature/xxx
- 將本地分支 xxx push 到遠(yuǎn)程 Git 庫:
git push --set-upstream origin feature/xxx
2. 如何重命名遠(yuǎn)程分支
例如遠(yuǎn)程分支為:feature/xxx。
- 首先切換到該遠(yuǎn)程分支對應(yīng)的本地分支:
git checkout feature/xxx
- 拉取下最新代碼:
git pull
- 進(jìn)行重命名:
git blame -m feature/xxx feature/login
- 將 feature/login 推動(dòng)遠(yuǎn)程 Git 庫:
git push --set-upstream origin feature/login
- 刪除老舊遠(yuǎn)程分支:
git push origin --delete feature/xxx
3. 功能開發(fā)一半,臨時(shí)修復(fù)線上緊急 bug
這個(gè)時(shí)候,新功能開發(fā)代碼可能還沒完成,我們需要把當(dāng)前的工作進(jìn)度保存下,等修復(fù) bug 后再轉(zhuǎn)過頭來繼續(xù)開發(fā)。
- 保存當(dāng)前的工作進(jìn)度,并附上注釋:
git stash save "add login func"
- 獲取 stash list:
git stash list
- 修復(fù)完 bug 后,還原之前的工作進(jìn)度:
git stash pop stash@{index}
4. 如何挑揀別人的 commit
對于同一功能的不同分支,可能其他開發(fā)對該功能進(jìn)行 bugfix,這個(gè)時(shí)候我們也想用在自己的分支 fix 這個(gè) bug,注意不要腦殘貼代碼呢,敲黑板!!!
- 獲取其他開發(fā)者修復(fù)的 commitId:
git log 或 git reflog
- 挑揀別人的 commitId 到自己的分支:
git cherry-pick commitId
5. 如何回退版本
對于某一錯(cuò)誤操作致使項(xiàng)目無法正常運(yùn)行,我們需要對某一點(diǎn)進(jìn)行還原,有點(diǎn)類似電腦操作系統(tǒng)的備份點(diǎn)或還原點(diǎn);這個(gè)操作會使 git 指針往后退,所以在 push 的時(shí)候需要強(qiáng)制 push 才能成功!
- 獲取還原點(diǎn),還原點(diǎn)選擇很重要,需要選擇正確版本的最新:
commitId
- 回退版本:
git reset commitId
- 查看 reset 后的代碼更改項(xiàng):
git status
- 忽略更改項(xiàng),直接強(qiáng)制 push:
git checkout .
git push -f
6. 如何撤銷某一個(gè) commit
撤銷操作和回退操作唯一不同的是,撤銷的操作指針是往前的,回退的操作指針是往后的;撤銷相當(dāng)于相互抵消,等于白干!
- 獲取需要撤銷的 commitId。
- 進(jìn)行撤銷:
git revert commitId
7. 如何合并分支
當(dāng)功能分支測試完成,一切就緒后,需要同步下 master 分支,避免不必要的沖突;這個(gè)時(shí)候有兩個(gè)選擇:
git merge origin/master
git merge --no-ff origin/master
兩者有什么區(qū)別呢?
-ff
默認(rèn)情況是快進(jìn)式(即 fast-forward),當(dāng)合并兩個(gè)分支時(shí),如果順著一個(gè)分支走下去可以到達(dá)另一個(gè)分支的話,那么 Git 在合并兩者時(shí),只會簡單地把指針右移,叫做“快進(jìn)”(fast-forward);這種情況如果刪除分支,則會丟失 merge 分支信息。
--no-ff
關(guān)閉 fast-forward 模式,在提交的時(shí)候,會創(chuàng)建一個(gè) merge 的 commit 信息,然后合并與 master 分支 merge 的不同行為,向后看,其實(shí)最終都會將代碼合并到 master 分支,而區(qū)別僅僅只是分支上的簡潔清晰的問題,然后,向前看,也就是我們使用 reset 的時(shí)候,就會發(fā)現(xiàn),不同的行為就帶來了不同的影響。
--squash
把一些不必要 commit 進(jìn)行壓縮,比如說,你的 feature 在開發(fā)的時(shí)候?qū)懙?commit 很亂,那么我們合并的時(shí)候不希望把這些歷史 commit 帶過來,于是使用 --squash 進(jìn)行合并,此時(shí)文件已經(jīng)同合并后一樣了,但不移動(dòng) HEAD,不提交。需要進(jìn)行一次額外的 commit 來“總結(jié)”一下,然后完成最終的合并。
這里筆者強(qiáng)烈推薦用 --on-ff 模式,這樣合并上來的分支 commit 一目了然,便于后期的版本更迭。
總結(jié)
以上是生活随笔為你收集整理的项目中使用 Git 高频场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git 错误提交后该如何回滚操作
- 下一篇: 2022-2028年中国内衣用热熔胶膜行